我们可以在python多进程环境中更改正在运行的进程的目标函数

时间:2016-02-19 20:15:00

标签: python parallel-processing python-multiprocessing

我目前正在研究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()

0 个答案:

没有答案