python如何在分离模式下运行进程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python如何在分离模式下运行进程相关的知识,希望对你有一定的参考价值。

这是一个例子:

from multiprocessing import Process
import time


def func():
    print('sub process is running')
    time.sleep(5)
    print('sub process finished')


if __name__ == '__main__':
    p = Process(target=func)
    p.start()
    print('done')

我期望的是主进程将在启动子进程后立即终止。但是在打印出'done'之后,终端仍在等待......有没有办法这样做,以便主打印出'完成'后立即退出,而不是等待子进程?我在这里很困惑,因为我不打电话给p.join()

答案

如果存在非daemon process,Python将不会结束。

通过在daemon调用之前设置start()属性,可以使进程守护进程。

p = Process(target=func)
p.daemon = True  # <-----
p.start()
print('done')

注意:将不会打印sub process finished消息;因为主进程将在退出时终止子进程。这可能不是你想要的。

你应该做双叉:

import os
import time
from multiprocessing import Process


def func():
    if os.fork() != 0:  # <--
        return          # <--
    print('sub process is running')
    time.sleep(5)
    print('sub process finished')


if __name__ == '__main__':
    p = Process(target=func)
    p.start()
    p.join()
    print('done')

以上是关于python如何在分离模式下运行进程的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

如何运行以分离模式运行的 Dramatiq 任务?

如何在分离模式 (-d) 下运行 tmux 而不会得到杂乱的输出

java 简单的代码片段,展示如何将javaagent附加到运行JVM进程

如何在 Gitlab 中以分离模式运行作业?

在片段分离时中止加载 AsyncTaskLoader