我目前正在研究python多进程,并且我创建了多个进程,其中一些目标函数worker1具有不同的输入,我希望在target = worker1中提供的当前工作完成后重用这些进程。
更具体地说,我想用一个具有相应输入的新目标函数worker2来改变运行进程的目标函数。但是,我没有看到使用相同的流程集执行此操作的优雅方法。
我现在能想到的解决方案是:
1)一个解决方案可能是终止这些流程并使用新目标创建新流程集,但这会产生流程创建开销。
2)使用工作队列并传递参数,但在这种情况下,目标函数需要从start开始就知道work1和work2。
3)工作池但是worker1和worker2不是同一个工作,所以我想把它们分开。 虚拟代码如下:
import multiprocessing as mp
def worker1(num):
"""thread worker function"""
print 'Worker1:', num
return
def worker2(num):
"""thread worker function"""
print 'worker2:', num
return
if __name__ == '__main__':
jobs = []
for i in range(5):
print "start job i"
p = mp.Process(target=worker1, args=(i,))
jobs.append(p)
p.start()
p.join()
for i in range(5):
print "start job i"
#map process p with new target worker2
jobs[i].someFunc(target=worker2, args=(i,))
jobs[i].join()
for i in range(5):
print len(jobs), i
p = jobs[i]
p.terminate()
print 'TERMINATED:', p, p.is_alive()
p.join()