python中的多线程
基本操作
创建线程:
方式一:
使用_thread模块直接开启一个线程
import _thread
_thread.start_new_thread()
方式二:
继承一个线程类(可以自定义该线程类,继承threading.Thread)
import threading
class my_thread(threading.Thread):
def __init__(self[,…]):
pass
def run(self):
pass
thread1=my_thread([,…])
thread1.start()
方式三:
使用threading.Thread
import threading
thread=threading.Thread(target=f())
thread.setDaemon(True)##默认为False
thread.start()
构造方法threading.Thread()
Thread(group=None, target=None, name=None, args=(), kwargs={})
group: 线程组,目前还没有实现,库引用中提示必须是None;
target: 要执行的方法;
name: 线程名;
args/kwargs: 要传入方法的参数。
实例方法
isAlive(): 返回线程是否在运行。正在运行指启动后、终止前。
get/setName(name): 获取/设置线程名。
start(): 线程准备就绪,等待CPU调度
is/setDaemon(bool): 获取/设置是后台线程(默认前台线程(False))。(在start之前设置)
start(): 启动线程。
join([timeout]): 阻塞当前上下文环境的线程,直到调用此方法的线程终止或到达指定的timeout(可选参数)
Daemon(守护)
设置Daemon属性为True的线程为主线程的守护线程。
顾名思义,即将该线程设置为主线程所守护的宝宝线程(xd)
在脚本运行过程,主线程中创建了子线程,当主线程结束时根据子线程daemon属性值的不同可能会发生下面的两种情况之一:
若某个子线程的daemon属性为False,主线程结束时会检测该子线程是否结束,如果该子线程还在运行,则主线程会等待它完成后再退出;
若某个子线程的daemon属性为True,主线程会在结束后时同时将该子线程也结束掉,不论该子线程是否完成
另。若某个子线程的属性为False,则只有子调用thread.start()之前才能设置该值
join函数
应用场景:
当主线程结束后,Daemon属性为True的线程也会结束,然而此时可能该线程还没有完成其任务。此时就需要join函数了
join函数的作用是使线程之间同步
for thread in threads:
thread.join()
这样设置之后,主线程结束之后,会等待被join的线程结束,再退出程序
网友评论