当从 python 使用多处理库创建进程时,父进程在返回之前等待其子进程返回。事实上,文档建议加入所有孩子。但我想让父母在其子进程完成之前返回。
有没有办法“分离”子进程。
我知道使用 subprocess.Popen 可以创建分离的子进程,但我想使用多处理库中的功能,如队列、锁等。
我举了两个例子来说明区别。
第一个示例使用多处理库。调用此脚本时,它会打印父消息,等待 5 秒,然后打印子消息,然后才返回。
# Using multiprocessing, only returns after 5 seconds
from multiprocessing import Process
from time import sleep, asctime
def child():
sleep(5.0)
print 'Child end reached on', asctime()
if __name__ == '__main__':
p = Process(target = child)
p.start()
# Detach child process here so parent can return.
print 'Parent end reached on', asctime()
第二个示例使用 subprocess.Popen。调用此脚本时,它会打印父消息,返回 (!!!) 并在 5 秒后打印子消息。
# Using Popen, returns immediately.
import sys
from subprocess import Popen
from time import sleep, asctime
def child():
sleep(5)
print 'Child end reached on', asctime()
if __name__ == '__main__':
if 'call_child' in sys.argv:
child()
else:
Popen([sys.executable] + [__file__] + ['call_child'])
print 'Parent end reached on', asctime()
如果我可以传递队列、管道、锁、信号量等,第二个例子是可以接受的。
IMO,第一个示例还导致代码更清晰。
我在 Windows 上使用 python 2.7。