一尘不染

Python 3.4多处理递归Pool.map()

python

我正在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)

阅读 257

收藏
2021-01-20

共1个答案

一尘不染

这是不可能的。所述Pool对象本身不能安全进程之间被共享,所以相同的池不能在两者中使用fg。即使您 可以
执行此操作,也很快会导致挂起,因为您的池仅限于cpu_count()并发工作程序。一旦开始递归地创建更多的工作人员,您最终将获得比cpu_count()工作人员更多的工作量,这将永远无法完成。正在运行的工作人员将等待池中排队的任务,但是排队的任务将永远无法启动,因为正在运行的任务正在等待。因此,您最终陷入僵局。简而言之:不要尝试这样做。

2021-01-20