Python 病理处理池递归限制

Python 病理处理池递归限制,python,recursion,parallel-processing,multiprocessing,pathos,Python,Recursion,Parallel Processing,Multiprocessing,Pathos,我有一个任务,我正试图将其与悲情并行。当我运行非并行版本时,它运行得很好。但是,运行pathos池1进程会导致运行时错误:超过最大递归深度 例如: import pathos.multiprocessing as mp pool = mp.ProcessPool(1) def _worker(fx): return fx[0](fx[1],fx[2]) 在我试图调试此错误发生的原因时,我尝试映射一个对象的列表。这在没有多重处理的情况下有效 >>> map(_worke

我有一个任务,我正试图将其与悲情并行。当我运行非并行版本时,它运行得很好。但是,运行pathos池1进程会导致运行时错误:超过最大递归深度

例如:

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
是要应用的昂贵函数。我有一个完整的列表,上面列出了应用于相同两个参数的expressive函数。这就是并行处理的用武之地。但是,以下命令会引发错误:

>>> 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
>>pool.map(_-worker、izip([t1.getValue]、repeat(全部)、repeat(惩罚)))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python2.7/site packages/paths/multiprocessing.py”,地图第136行
return _pool.map(星形(f),zip(*args))35; chunksize
文件“/usr/local/lib/python2.7/site packages/multiprocess/pool.py”,地图第251行
返回self.map\u async(func,iterable,chunksize).get()
get中的文件“/usr/local/lib/python2.7/site packages/multiprocess/pool.py”,第567行
提升自我价值
运行时错误:超过最大递归深度
有趣的是,
getValue
不是递归的。我知道当达到堆栈限制时,有时会发生这种情况


如何确定是
getValue
的哪一部分导致了使多处理工作的错误?我被卡住了,因为我不知道如何从这一点调试它。这是否可能是由于向进程传递数据时的酸洗错误导致的
getValue
在幕后处理一些大型结构

您可以尝试使用sys.setrecursionlimit()来增加递归的限制,例如:

import sys
sys.setrecursionlimit(1000000)

您可以尝试使用sys.setrecursionlimit()来增加递归的限制,例如:

import sys
sys.setrecursionlimit(1000000)

这是一个可怕的想法,解决了症状,但没有解决问题这是一个可怕的想法,解决了症状,但没有解决问题