我想确保在任何给定时间产生的最小数量的子进程仍处于活动状态;目前产生如下:
pool = Pool(processes=WORKERS)
pool.map(worker.run, range(WORKERS)) # pass process a number as its ID
在某些情况下,工作人员会因为错误导致return
或崩溃并烧毁 - 我想在这种情况下产生一个新工人。这有可能吗?
谢谢,
答案 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()