线程集守护进程无效

时间:2017-09-08 19:11:56

标签: python python-multithreading

一个非常简单的脚本。

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那样。我错过了一些基本的东西?

2 个答案:

答案 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/