Python3.4多处理递归池.map()
我正在Ubuntu 14.04上使用Python 3.4进行开发。我正在尝试递归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]])
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,这将永远无法完成;正在运行的工作线程将等待在池中排队的任务,但排队的任务将永远无法启动,因为正在运行的任务正在等待。所以你最终陷入了僵局。简言之:不要试图这样做