【问题标题】:Python: passing Pool objects to a function in different processPython:将池对象传递给不同进程中的函数
【发布时间】:2015-09-04 10:35:05
【问题描述】:

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

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

启动进程后程序不运行。

【问题讨论】:

    标签: python multiprocessing threadpool python-multiprocessing


    【解决方案1】:

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

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

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

    【讨论】:

    • 然而,“AssertionError: daemonic processes are not allowed to have children”。您不能在池化函数中创建池,可能是为了防止 CPU 负载呈指数增长。所以我想创建一个全局池对象并随时从该池中提取。似乎也不起作用。太好了……
    猜你喜欢
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多