Python3.4多处理递归池.map()

Python3.4多处理递归池.map(),python,recursion,multiprocessing,Python,Recursion,Multiprocessing,我正在Ubuntu 14.04上使用Python 3.4进行开发。我正在尝试递归Pool.map()。在我调用g()之后,它挂在那里,永远不会返回 import multiprocessing as mp pool = mp.Pool() def d(x): return x / 2.0 def f(x): w = pool.map(d, x) return w def g(): v = pool.map(f, [[1, 2], [3, 4]])

我正在Ubuntu 14.04上使用Python 3.4进行开发。我正在尝试递归
Pool.map()
。在我调用
g()
之后,它挂在那里,永远不会返回

import multiprocessing as mp

pool = mp.Pool()

def d(x):
    return x / 2.0


def f(x):
    w = pool.map(d, x)
    return w

def g():
    v = pool.map(f, [[1, 2], [3, 4]])

    print(v)
:

请注意,池对象的方法只能由创建池的进程调用

在调用
pool.map()
内部
f()
时,您违反了该规则。此外,如果您试图让子进程创建自己的池,您将得到一个断言错误:

AssertionError: daemonic processes are not allowed to have children

这是不可能的。
Pool
对象本身不能在进程之间安全地共享,因此同一个池不能同时用于
f
g
。即使您可以这样做,也会很快导致挂起,因为您的池仅限于
cpu\u count()
concurrent worker。一旦你开始递归地创建更多的worker,你将得到超过
cpu\u count()
的worker,这将永远无法完成;正在运行的工作线程将等待在池中排队的任务,但排队的任务将永远无法启动,因为正在运行的任务正在等待。所以你最终陷入了僵局。简言之:不要试图这样做