mis*_*yes 5 python multiprocessing
我想创建许多进程,每个进程比前一个进程运行5秒,即每个进程启动之间的时间间隔为5秒,这样:运行进程1等待5秒运行进程2等待5秒运行进程3等待5秒 .....
喜欢:
for i in range(10):
p = multiprocessing.Process(target=func)
p.start()
sleep(5)
#after all child process exit
do_something()
Run Code Online (Sandbox Code Playgroud)
但我想在所有进程退出后调用do_something()我不知道如何在这里进行同步
有了python池库,我可以拥有
pool = multiprocessing.Pool(processes=4)
for i in xrange(500):
pool.apply_async(func, i)
pool.close()
pool.join()
do_something()
Run Code Online (Sandbox Code Playgroud)
但是这样,4个进程将同时运行,我无法确定进程之间的时间间隔,是否可以创建进程池然后获取每个进程,类似于
pool = multiprocessing.Pool(processes=4)
for i in xrange(500):
process = pool.fetch_one()
process(func, i)
time.sleep(5)
pool.close()
pool.join()
do_something()
Run Code Online (Sandbox Code Playgroud)
是否有满足我需求的库或源代码片段?谢谢
只是为了将建议放在一起,您可以执行以下操作:
plist = []
for i in range(10):
p = multiprocessing.Process(target=func)
p.start()
plist.append(p)
sleep(5)
for p in plist:
p.join()
do_something()
Run Code Online (Sandbox Code Playgroud)
您可以给出一个超时参数join()来处理卡住的进程;在这种情况下,您必须不断迭代列表,删除终止的进程,直到列表为空。