Python守护线程在进程结束时退出

0 投票
1 回答
683 浏览
提问于 2025-04-18 13:54

我在一个终端上启动了一个Python脚本,然后在另一个终端上用kill -9命令来结束这个进程。我希望即使父进程被杀掉,线程仍然能够继续执行并修改文件。但是实际上并没有这样发生。有没有什么办法可以实现这个呢?

import time,os
import threading
# Create your tests here.

def a(fname):
    print "a"
    time.sleep(20)
        touch(fname)

def touch(fname, times=None):
    with open(fname, 'a'):
        os.utime(fname, times)
    print "touched"

fname = "test.txt"
t = threading.Thread(target=a, args=(fname,))
t.setDaemon(True)
t.start()
t.join()

1 个回答

1

很遗憾,你尝试的事情是不可能的。线程只能在它们的父进程运行的时候运行。如果你想从你的脚本中开始执行一些代码,但希望这些代码在你的脚本退出后继续执行,你应该把这些代码放到一个单独的脚本里,然后使用 subprocess 模块来启动它。具体来说,你可以使用 subprocess.Popen 来启动这个脚本,而不需要等待它完成:

subprocess.Popen(['./yourscript.py', '-a', 'opt'])

撰写回答