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

时间:2018-05-24 06:19:56

标签: python linux python-3.x shell process

代码:

文件:script.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. 新创建的流程可以继续运行。

1 个答案:

答案 0 :(得分:0)

这是因为在async_process()中创建的子进程没有与其父进程分离,因此父进程必须等待子进程完成才能退出。 如果要在术语的Unix含义中创建守护进程,则必须使用双叉方法将子进程与其父进程分离,并将控制权移交给OS的调度程序。 This看起来是在python

中创建Unix守护进程的一个不错的方法