Fal*_*rri 44 python multithreading daemon python-multithreading
关于将线程设置为守护进程意味着什么,我有点困惑.文档说明了这一点:
线程可以标记为"守护程序线程".这个标志的意义在于,当只剩下守护进程线程时,整个Python程序都会退出.初始值继承自创建线程.可以通过守护程序属性设置该标志.
我不确定是什么让这与普通线程不同.这是说这个程序永远不会完成吗?
def threadfunc():
while True:
time.sleep(1)
threading.Thread(target=threadfunc).start()
Run Code Online (Sandbox Code Playgroud)
即使主线程完成它的执行.而
def threadfunc():
while True:
time.sleep(1)
th = threading.Thread(target=threadfunc)
th.daemon = True
th.start()
Run Code Online (Sandbox Code Playgroud)
马上完成?
我问,因为我有一个情况,在我的主线程中我正在调用sys.exit(),并且进程只是挂起而我的其他线程正在运行,因为我可以看到日志.这与使用线程活动调用的sys.exit()有什么关系吗?
Joc*_*zel 41
这是说这个程序永远不会完成吗?
是的,该程序无法完成,只需尝试一下即可.
我问,因为我有一个情况,在我的主线程中我正在调用sys.exit(),并且进程只是挂起而我的其他线程正在运行,因为我可以看到日志.这与使用线程活动调用的sys.exit()有什么关系吗?
是的,即使exit
不会阻止其他线程,它只是SystemExit
在主线程中引发.因此,虽然主线程将停止(就像在任何其他未处理的Exception上一样),所有其他非守护线程将继续工作.
Tel*_*Sam 13
设置thread.daemon = True
将允许主程序退出.应用程序通常会等到所有子线程完成后再完成.
th.daemon = True #set this thread as a Daemon Thread
Run Code Online (Sandbox Code Playgroud)
您可以将Daemon线程作为服务来考虑,这意味着它将在计算机中执行不同任务的后台运行,例如索引文件,解析xml,检索新闻等,这是一个长期运行的过程。
您的Main线程将完成,并且守护程序仍将在后台运行,这就是您的程序又称为Main线程完成的原因,如果您只想进行无限循环,您将看到线程仍在运行。守护程序线程的一个示例是垃圾回收。
归档时间: |
|
查看次数: |
59966 次 |
最近记录: |