在莳萝序列化/酸洗中构建了我的代码的重要部分,我也尝试使用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%正确。
答案 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。我还没有尝试过,所以我无法详细说明这一点。