守护线程
Posted 懒虫小园
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了守护线程相关的知识,希望对你有一定的参考价值。
守护线程
守护线程:只要主线程结束,那么子线程立即结束,不管子线程有没有运行完成。
1、未加守护线程:先运行主线程先打印:“Done,运行完成”,然后继续休眠3秒子线程启动打印“哈哈哈”。
import threading,time def run(): time.sleep(3) print(‘哈哈哈‘) for i in range(5): t = threading.Thread(target=run) t.start() print(‘Done,运行完成。‘) #先运行主线程,先打印,Done,运行完成。,然后运行线程,先等待三秒之后,启动子线程 #结果 Done,运行完成。 哈哈哈 哈哈哈 哈哈哈 哈哈哈 哈哈哈
2、加了守护线程:setDaemon(True)#把子线程设置成守护线程
主线程执行完成之后,子线程跟着结束,所有没有打印哈哈哈哈哈
import threading,time def run(): time.sleep(3)#需要3秒 print(‘哈哈哈哈哈‘) for i in range(5): t=threading.Thread(target=run)#实例化一个线程 t.setDaemon(True)#把子线程设置成守护线程 t.start() print(‘Done,运行完成。‘) #结果: Done,运行完成。
3、主线程设置睡眠时间睡眠时间:
import threading,time def run(): time.sleep(3)#需要3秒 print(‘哈哈哈哈哈‘) for i in range(5): t=threading.Thread(target=run)#实例化一个线程 t.setDaemon(True)#把子线程设置成守护线程 t.start() print(‘Done,运行完成。‘) time.sleep(3) #结果 Done,运行完成。 哈哈哈哈哈 哈哈哈哈哈 哈哈哈哈哈
注意:为什么上述代码只输出可三条“哈哈哈哈哈”?
原因:主线程设置睡眠时间3秒,子线程的睡眠时间也刚好三秒,刚好能启动子线程,但是子线程启动之后不一定所有的子线程都能执行完,有些子线程可能还是执行完就已经结束
1、如果主线程设置睡眠时间为2秒,主线程完成2秒后,还没等到子线程3秒启动,就结束,也只会打印:Done,运行完成。
import threading,time def run(): time.sleep(3)#需要3秒 print(‘哈哈哈哈哈‘) for i in range(5): t=threading.Thread(target=run)#实例化一个线程 t.setDaemon(True)#把子线程设置成守护线程 t.start() print(‘Done,运行完成。‘) time.sleep(2) #结果: Done,运行完成。
2、如果主线程的睡眠时间超过子线程执行完成时间,那么子线程可以完全执行完:
import threading,time def run(): time.sleep(3)#需要3秒 print(‘哈哈哈哈哈‘) for i in range(5): t=threading.Thread(target=run)#实例化一个线程 t.setDaemon(True)#把子线程设置成守护线程 t.start() print(‘Done,运行完成。‘) time.sleep(4) #结果 Done,运行完成。 哈哈哈哈哈 哈哈哈哈哈 哈哈哈哈哈 哈哈哈哈哈 哈哈哈哈哈
以上是关于守护线程的主要内容,如果未能解决你的问题,请参考以下文章