python中的多处理 - 确保最少数量的子进程处于活动状态

时间:2011-01-13 21:06:29

标签: python multiprocessing

我想确保在任何给定时间产生的最小数量的子进程仍处于活动状态;目前产生如下:

pool = Pool(processes=WORKERS)
pool.map(worker.run, range(WORKERS)) # pass process a number as its ID

在某些情况下,工作人员会因为错误导致return或崩溃并烧毁 - 我想在这种情况下产生一个新工人。这有可能吗?

谢谢,

1 个答案:

答案 0 :(得分:2)

这是一个简单(愚蠢?)的解决方案:定期检查所有工作人员,弹出已返回的工作人员并将新工具添加到工作人员列表中(从Doug Hellman借来的基本代码):

import multiprocessing, random, time

def worker(num):
    """thread worker function"""
    time.sleep(random.randint(1,10))
    print 'Worker:', num
    return

if __name__ == '__main__':
    jobs = []
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        jobs.append(p)
        p.start()

    while True:
        time.sleep(2)
        for n, p in enumerate(jobs):
            if not p.is_alive():
                jobs.pop(n)
                i += 1
                p = multiprocessing.Process(target=worker, args=(i,))
                jobs.append(p)
                p.start()