代码:
文件: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()"
命令行将完成执行,直到新创建的进程完成为止。这不是我想要的。
我应该如何更改程序或如何编写脚本以确保:
我可以在命令行中调用func();
命令行将在func()完成后立即返回值,并且不会等待新创建的进程。
新创建的流程可以继续运行。
答案 0 :(得分:0)
这是因为在async_process()
中创建的子进程没有与其父进程分离,因此父进程必须等待子进程完成才能退出。
如果要在术语的Unix含义中创建守护进程,则必须使用双叉方法将子进程与其父进程分离,并将控制权移交给OS的调度程序。
This看起来是在python