我正在Ubuntu 14.04上使用Python 3.4进行开发。我试图做递归Pool.map()。在我调用之后g(),它挂在那里并且永远不会返回。
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对象本身不能安全进程之间被共享,所以相同的池不能在两者中使用f和g。即使您 可以 执行此操作,也很快会导致挂起,因为您的池仅限于cpu_count()并发工作程序。一旦开始递归地创建更多的工作人员,您最终将获得比cpu_count()工作人员更多的工作量,这将永远无法完成。正在运行的工作人员将等待池中排队的任务,但是排队的任务将永远无法启动,因为正在运行的任务正在等待。因此,您最终陷入僵局。简而言之:不要尝试这样做。
Pool
f
g
cpu_count()