我有一个任务要与悲情并行。当我运行非并行版本时,它运行得很好。但是,运行 1 个进程的 pathos 池会导致 RuntimeError:超出最大递归深度。
例如:
import pathos.multiprocessing as mp
pool = mp.ProcessPool(1)
def _worker(fx):
return fx[0](fx[1],fx[2])
在我尝试调试为什么会发生此错误时,我尝试映射一个对象的列表。这无需多处理即可工作
>>> map(_worker, izip([t1.getValue], repeat(a_all), repeat(penalties)))
[-0.34375]
t1.getValue
要应用的昂贵功能在哪里。我有一个完整的列表,这些函数适用于相同的两个参数。这是并行处理的用武之地。但是以下引发错误:
>>> pool.map(_worker, izip([t1.getValue], repeat(a_all), repeat(penalties)))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/pathos/multiprocessing.py", line 136, in map
return _pool.map(star(f), zip(*args)) # chunksize
File "/usr/local/lib/python2.7/site-packages/multiprocess/pool.py", line 251, in map
return self.map_async(func, iterable, chunksize).get()
File "/usr/local/lib/python2.7/site-packages/multiprocess/pool.py", line 567, in get
raise self._value
RuntimeError: maximum recursion depth exceeded
有趣的是它getValue
不是递归的。我知道这有时会在达到堆栈限制时发生。
如何确定getValue
导致错误的哪一部分导致多处理工作?我被卡住了,因为我不知道如何从这一点上调试它。将数据传递给进程时,这是否可能实际上是由酸洗错误引起的?getValue
确实在幕后处理了一些大型结构。