python -c cmd 将等待所有进程完成

标签 python linux python-3.x shell process

代码:

文件:脚本.py

from multiprocessing import Process


def func():
    async_process()
    print('OK')
    return 123

def func2(args):
    # do a lot of things here
    # ...
    pass

def async_process():
    p = Process(target=func2, args=args)
    p.daemon = False 
    p.start()

当我在 Python 脚本中直接调用 func() 时,我可以立即得到返回值,这是我所期望的。

但是,当我像这样在命令行中调用 func() 时:

python -c "from script import func;func()"

命令行将结束执行,直到新创建的进程自行结束。这不是我想要的。

我应该如何更改程序或者我应该如何编写脚本来确保:

  1. 我可以在命令行中调用 func();

  2. 命令行会在func()结束时立即返回值,不会等待新创建的进程。

  3. 新创建的进程可以一直运行。

最佳答案

那是因为在 async_process() 中创建的子进程没有脱离其父进程,因此父进程必须等待子进程完成才能退出。 如果你想创建一个 Unix 术语中的守护进程,你将不得不使用双叉方法将子进程从其父进程中分离出来,并将控制权移交给操作系统的调度程序。 This看起来是在 python 中创建 Unix 守护进程的不错方法

关于python -c cmd 将等待所有进程完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50502266/

相关文章:

python - 如何在Colab中播放视频?

Linux无法通过管道获取数据

linux - 在不影响主机的情况下更改 Docker 容器中的系统日期时间

python - Django通过关系计算外键

python - 创建分块三对角矩阵

python - Python HTTPServer 和 TCPServer 的性能

linux - 具有合并和多个文件的 SVN

python 文件显示 AttributeError : module 'http' has no attribute 'client'

python - 在一个函数中调用2个函数

python-3.x - 结合 tkinter 和看门狗