温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - Threading Set Daemon not working
python python-multithreading

python - 线程设置守护程序不起作用

发布于 2020-03-29 21:32:14

一个非常简单的脚本。

test.py

import temp
temp.start()

临时

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()

我希望Daemon线程会在主进程test.py立即退出时完成。但是daemon线程与主线程一起退出并且不像daemon.E一样。我在这里缺少一些基本内容吗?

查看更多

提问者
vks
被浏览
40
pvg 2017-09-09 03:35

python文档中对此进行了详细描述

https://docs.python.org/3/library/threading.html

最相关的位是:

线程可以标记为“守护程序线程”。该标志的重要性在于,仅保留守护程序线程时,整个Python程序都会退出。

守护程序线程在关闭时突然停止。它们的资源(例如打开的文件,数据库事务等)可能无法正确释放。

术语“守护程序”的超载和否定扭曲会使这有些混乱,但其归结为:python程序在其所有线程完成后退出,除非守护程序线程在没有其他线程的情况下被终止剩下非守护进程线程。在您的情况下,这意味着程序在有机会做任何事情之前退出杀死您的守护程序线程(或者相反,如果您完成了线程运行,则退出setDaemon(false))。