鉴于以下代码:
from threading import Thread
def dosomething():
for _ in range(100):
print("background thread running")
t = Thread(target=dosomething)
t.start()
只要后台线程需要完全通过循环,程序就会运行。我的问题是,为什么主线程等待后台线程完成并且在启动后台线程后不立即退出。
因为事情就是这样。从threading
文档:
一个线程可以被标记为“守护线程”。这个标志的意义在于,当只剩下守护线程时,整个 Python 程序就会退出。初始值是从创建线程继承的。该标志可以通过 daemon 属性或 daemon 构造函数参数设置。
我假设您python my_script.py
在命令行上运行了类似的东西,并想知道为什么在工作线程完成之前它不会将您返回到提示?
好吧,如果您将代码更改为:
from threading import Thread
def dosomething():
for _ in range(100):
print("background thread running")
t = Thread(target=dosomething, daemon=True)
t.start()
你会发现你回到了终端。但是,您的守护进程线程也会终止(再次来自文档):
注意守护线程在关机时突然停止。他们的资源(如打开的文件、数据库事务等)可能无法正常释放。如果您希望您的线程正常停止,请将它们设为非守护进程并使用合适的信号机制,例如事件。
这是因为终止程序意味着终止进程,并且由于该工作线程由该进程处理,因此它会死亡 - 请尝试这篇文章以获得更全面的解释。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句