如何在主进程退出后保留子进程运行?
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')
我需要使用 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')