Python:将Pool对象传递给不同进程的函数

时间:2015-06-18 16:49:56

标签: python multiprocessing threadpool python-multiprocessing

我在以下代码中做错了什么?

import multiprocessing as mp
from multiprocessing import Process
import numpy as np

def fun(X):
    return X;

def funct(p,i):
    print 'Hey'
    res = [p.map(fun,range(2))];
    return res;


if __name__ == '__main__':
    pool = mp.Pool(2);
    output = mp.Queue();
    proc = [mp.Process(target = funct,args=(pool,i)) for i in range(2)]
    for p in proc:
        p.start()
    for p in proc:
        p.join()
    results = [output.get() for p in proc]
    print results

启动流程后程序无法运行。

1 个答案:

答案 0 :(得分:3)

multiprocessing.Pool并不支持传递给子流程,如multiprocessing documentation中所述:

  

请注意,池的方法只能由创建它的进程使用。

所以实际上没有办法做你正在尝试的事情。我假设您上面的代码只是演示问题的一个示例,因此我不会直接对此进行评论,但您需要将实际代码重构为仅从父级调用池方法过程(或者可能在孩子自己中创建池,但这可能不是一个好的解决方案)。