Python守护线程:程序何时终止运行?
Python守护线程:程序何时终止运行?
嘿,你的理解完全正确!Python的规则就是:当程序里只剩下守护线程在运行时,整个Python程序会直接终止,不管这些守护线程有没有完成任务——哪怕是你写的这种无限循环的守护线程也不例外。
咱们来拆解下你的代码例子:
import threading import time def daemonThread(): while True: print("Sending Out Heartbeat Signal") time.sleep(2) if __name__ == '__main__': daemonThread = threading.Thread(target=daemonThread) daemonThread.daemon = True daemonThread.start() print('finish')
运行后的输出是:
Sending Out Heartbeat Signal
finish
为什么程序没有一直输出心跳信号?因为主线程(也就是__main__对应的线程,默认是非守护线程)在启动守护线程后,很快执行到了print('finish'),这时候主线程的任务就完成了。此时程序里只剩下你标记为daemon的那个线程在运行,按照Python的规则,程序会立刻终止,不会等待守护线程的无限循环继续执行。
你看到的那一行心跳输出,是因为守护线程在主线程结束前,刚好完成了第一次循环里的print操作,还没来得及进入time.sleep(2)的等待或者下一次循环,程序就已经终止了。
备注:内容来源于stack exchange,提问作者user19551894
相关产品推荐
相关产品推荐

