线程

线程:

1、线程也是多任务编程的一种方法,可以使用计算机多核资源。是计算机核心分配的最小单、位

2、线程又称为轻量级的进程,在创建和删除时消耗的计算机资源小

 

线程和进程的关系:

1、一个进程中可以包含多个线程

2、进程中的所有线程,共享进程的空间资源(空间,全局变量,分配的内存等)

3、线程也有自己的特有属性,比如 指令集  TID等

 

创建线程

import threading

threading.Tread

Thread()

功能:创建线程

参数:target 线程函数

   args  元组 给线程函数位置传参

   kwargs 字典 给线程函数字典传参

           name 给线程取名字(默认Thread-1)

返回:线程对象

 t.start()     启动线程

t.join(timeout)     回收线程

t.is_alive()  查看线程状态

t.name 查看线程名称

threading.currentThread()  得到线程对象

t.setName()设置线程名称

t.daemon 属性

默认 为false 主线程执行完毕,不会影响分支线程的执行

        如果设置为True,则主线执行完毕,其他线程也会终止

t.isDaemon():判断daemon属性是true or false

t.daemon=True

t.setDaemon(True)

import threading
from time import sleep
#线程函数
def music():
    while True:
        sleep(3)
        print("线程播放")
关联创建线程和函数MUSIC#
t=threading.Thread(target=music)
t.start()

while True:

    sleep(2)
    print('主线程播放')
#等待回收线程    
t.join()    
from threading import Thread,currentThread
from time import sleep

def fun(sec):
    print("线程属性测试")
    sleep(sec)
    print("%s线程结束"%currentThread().getName())

thread=[]

for i in range(3):
    t=Thread(name="t"+str(i),target=fun,args=(3,))    
    t.start()
    thread.append(t)
for i in thread:
    print("thread name :",i.name)
    print("alive:",i.is_alive())
    i.join()    
yangrui@ubuntu:~/num6$ python3 thread2.py 
线程属性测试
线程属性测试
线程属性测试
thread name : tedu0
alive: True
tedu0线程结束
thread name : tedu1
alive: True
tedu1线程结束
tedu2线程结束
thread name : tedu2
alive: False
结果

 

线程的通信;

通过全局变量进行通信

进程和线程的区别和联系:

1、两者都是多任务编程方式,均可使用计算机的多核

2、进程的创建要比线程消耗更多的资源

3、进程空间独立,数据安全性更好操作,有专门的进程间通信方式

4、线程使用全局变量通信,往往要和同步互斥机制配合,防止产生资源的争夺

5、一个进程可以包含多个线程,线程共享进程资源

6、进程线程都有自己的特有资源。

 使用场景:

需要创建较多的并发,任务比较简单,线程比较合适;

如果程序数据资源使用重叠较多,要考虑到线程锁是否需要更复杂的逻辑;

如果多个任务并无什么关联性,不易用多线程,将其融入到一个进程中;

(python线程并不使用用计算密集型并发)

线程中同步互斥方法:

Event 线程事件

e=Event()

e.wait()     e.set()       e.clear()

 

Lock 线程锁

lock=Lock() 创建锁

lock.acquire()加锁

lock.release()解锁

posted @ 2019-07-16 17:16  sike8  阅读(199)  评论(0编辑  收藏  举报