如何运行嵌套的,分层的pathos多处理映射?

时间:2016-10-15 15:43:56

标签: python parallel-processing python-multiprocessing pathos

在莳萝序列化/酸洗中构建了我的代码的重要部分,我也尝试使用pathos多处理来并行化我的计算。它是莳萝的自然延伸。

尝试运行嵌套

conda install pyqt
Fetching package metadata .......
Solving package specifications: ..........

# All requested packages already installed.
# packages in environment at /home/ec2-user/anaconda2:
#
pyqt                      5.6.0                    py27_0 

在另一个from pathos.multiprocessing import ProcessingPool ProcessingPool().map(fn, args) 内,然后我收到:

ProcessingPool().map

E.g:

AssertionError: daemonic processes are not allowed to have children

产量

from pathos.multiprocessing import ProcessingPool

def triple(x):
    return 3*x

def refork(x):
    from pathos.multiprocessing import ProcessingPool
    return ProcessingPool().map(triple, xrange(5))

ProcessingPool().map(refork, xrange(3))

我尝试使用AssertionError: daemonic processes are not allowed to have children 但没有成功。这是在病史0.2.0。

允许嵌套并行化的最佳方法是什么?

更新

此时我必须诚实,并承认我已从故障中删除了断言amap(...).get()。我还为那些工人和工人建造了一个级联"daemonic processes are not allowed to have children"的东西......以下解决方案的部分内容:

KeyboardInterrupt

似乎可以通过控制台和IPython笔记本(带停止按钮)工作,但不确定它在所有极端情况下都是100%正确。

1 个答案:

答案 0 :(得分:3)

我遇到了完全相同的问题。就我而言,内部操作是需要并行性的操作,所以我做了ThreadingPool ProcessingPool。这是你的例子:

from pathos.multiprocessing import ProcessingPool, ThreadingPool

def triple(x):
    return 3*x

def refork(x):
    from pathos.multiprocessing import ProcessingPool
    return ProcessingPool().map(triple, xrange(5))

ThreadingPool().map(refork, xrange(3))

您甚至可以拥有另一个具有另一个外部线程池的图层。根据您的情况,您可以反转这些池的顺序。但是,您不能拥有流程流程。如果确实需要,请参阅:https://stackoverflow.com/a/8963618/6522112。我还没有尝试过,所以我无法详细说明这一点。