我正在尝试通过守护程序线程在文件中写入内容。问题是正在创建文件,但是它是空的。是否可以通过守护线程写入文件?
使用守护程序线程的原因是因为与线程相比,我的主程序将首先终止。因此,即使在使用程序守护程序执行后,也要保持该线程运行。
下面是代码:
import threading
def hlp():
with open("/path/to/y.txt",mode="w") as f:
f.write("Hello")
def test():
thr=threading.Thread(target=hlp)
thr.daemon=True
thr.start()
test()
答案 0 :(得分:2)
Coming from here,在与守护程序线程一起玩时,看起来好像需要在启动线程之后join
:
换句话说:
与
join
-解释器将等待,直到您的过程完成或 终止,在这种情况下,文件被写入
import threading
def hlp():
with open("C:\\Users\\munir.khan\\PycharmProjects\\opencv-basics2019-03-22_14-49-26\\y.txt",mode="a+") as f:
f.write("Hello")
def test():
thr=threading.Thread(target=hlp)
thr.daemon=True
thr.start()
thr.join()
test()
输出:
Hello
编辑:
如果您不想使用join
,可以设置thr.daemon=False
,但是我不喜欢它,因为它在这里说Setting thread.daemon = True
allows the main program to exit.
import threading
def hlp():
with open("C:\\Users\\munir.khan\\PycharmProjects\\opencv-basics2019-03-22_14-49-26\\y.txt",mode="a+") as f:
f.write("Hello")
def test():
thr=threading.Thread(target=hlp)
thr.daemon=False
thr.start()
test()
答案 1 :(得分:1)
使用守护线程可能不是您想要的,因为守护线程不会在程序退出之前等待线程完成。
如果仍然要使用守护程序,则应使用.join()
,以便等待该线程完成。
示例:
import threading
def hlp():
with open("/path/to/y.txt",mode="w") as f:
f.write("Hello")
def test():
thr=threading.Thread(target=hlp)
thr.daemon=True
thr.start()
thr.join()
test()