一个非常简单的脚本。
test.py
import temp
temp.start()
temp.py
import threading, time
f=open("output.txt","w")
def temp():
for i in range(5):
f.write(str(i))
time.sleep(5)
f.close()
def start():
t=threading.Thread(target=temp)
t.setDaemon(True)
t.start()
我希望守护程序线程能够在主要进程test.py
立即退出时完成。但是daemon
线程退出主进程并且不像daemon
那样。我错过了一些基本的东西?
答案 0 :(得分:2)
这在
的python文档中有详细描述https://docs.python.org/3/library/threading.html
最相关的位是:
线程可以标记为“守护程序线程”。这个的意义 flag是只有守护进程线程时整个Python程序退出 离开了。
和
守护程序线程在关闭时突然停止。他们的资源(如此 作为打开文件,数据库事务等)可能不会被释放 正常。
术语“守护进程”的超载#39;否定扭曲可以使这有点令人困惑,但它归结为:一个python程序在其所有线程完成后退出只,除了守护程序线程,如果没有其他非简单终止-daemon线程留下。在你的情况下,这意味着程序在有机会做任何事情之前退出杀死你的守护程序线程(或者相反,在你的线程完成之前不会退出,如果你setDaemon(false)
)。
答案 1 :(得分:0)
补充pvg's nice answer,对于您的问题,可能的解决方案是在您的情况下使用join():
t.join()
有关加入“ what is the use of join() in python threading”的更多信息
可以在以下网址找到实用的解释指南:https://realpython.com/intro-to-python-threading/