如何在主进程退出后保留子进程运行?

How to keep sub-process running after main process has exited?

我需要使用 python 来启动一个完全独立的进程。也就是说即使主进程退出了,子进程还可以运行.

就像Linux中的shell:

#./a.out &

那么即使ssh连接丢失,那么a.out仍然可以保持运行ning

我需要一种类似但统一的方式来跨越 Linux 和 Windows

我试过多处理模块

import multiprocessing
import time
def fun():
    while True:
        print("Hello")
        time.sleep(3)

if __name__ == '__main__':
    p = multiprocessing.Process(name="Fun", target=fun)
    p.daemon = True
    p.start()
    time.sleep(6)

如果我设置 p.daemon = True,那么 print("Hello") 将在 6 秒后停止,就在主进程退出之后。

但是如果我设置p.daemon = False,主进程不会按时退出,如果我CTRL+C强制退出主进程,print("Hello")也将停止。

那么,有没有办法在主进程退出的情况下继续打印这个“Hello”?

subprocess模块​​可以做到。如果您有这样的 .py 文件:

from subprocess import Popen
p = Popen([r'C:\Program Files\VideoLAN\VLC\vlc.exe'])

文件将很快结束其 运行 并退出,但 vlc.exe 将保持打开状态。

在你的例子中,因为你想使用另一个函数,原则上你可以将它分成另一个 .py 文件

multiprocessing模块一般用于将一个庞大的任务拆分成多个子任务,运行它们并行,以提高性能。

在这种情况下,您需要使用 subprocess 模块。

您可以将 fun 函数放在单独的文件中(sub.py):

import time

while True:
    print("Hello")
    time.sleep(3)

然后你可以从主文件中调用它(main.py):

from subprocess import Popen
import time

if __name__ == '__main__':
    Popen(["python", "./sub.py"])
    time.sleep(6)
    print('Parent Exiting')