代码:
文件:脚本.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()结束时立即返回值,不会等待新创建的进程。
新创建的进程可以一直运行。
最佳答案
那是因为在 async_process()
中创建的子进程没有脱离其父进程,因此父进程必须等待子进程完成才能退出。
如果你想创建一个 Unix 术语中的守护进程,你将不得不使用双叉方法将子进程从其父进程中分离出来,并将控制权移交给操作系统的调度程序。
This看起来是在 python 中创建 Unix 守护进程的不错方法
关于python -c cmd 将等待所有进程完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50502266/