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

时间:2019-10-22 10:47:35

标签: python linux windows multiprocess

我需要使用python启动一个完全独立的进程。这意味着即使退出了主进程,子进程仍然可以运行。

就像Linux中的shell:

#./a.out &

然后,即使ssh连接断开,a.out仍可以继续运行。

我需要在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”呢?

2 个答案:

答案 0 :(得分:0)

子流程模块可以做到。如果您有一个.py文件,例如:

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

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

在您的情况下,由于要使用其他功能,原则上可以将其分成另一个.py文件

答案 1 :(得分:0)

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