如何从python进程池中获取进程

时间:2013-05-06 01:07:43

标签: 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()

但我希望在所有进程退出后调用do_something() 我不知道如何在这里进行同步

使用python池库,我可以

    pool = multiprocessing.Pool(processes=4)
    for i in xrange(500):
            pool.apply_async(func, i)
    pool.close()
    pool.join()
    do_something()

但以这种方式,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()

是否有满足我需求的库或源代码片段? 感谢

1 个答案:

答案 0 :(得分:0)

只是将建议放在一起,你可以做类似的事情:

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()

您可以为join()提供超时参数,以便处理卡住的进程;在这种情况下,您必须继续遍历列表,删除已终止的进程,直到列表为空。