2

Pathos와 병렬 처리하려고하는 작업이 있습니다. 비 병렬 버전을 실행하면 정상적으로 실행됩니다. 그러나 1 프로세스의 pathos 풀을 실행하면 RuntimeError : maximum recursion depth가 초과됩니다. 예를 들어Pathos 처리 풀 재귀 제한

:

import pathos.multiprocessing as mp 
pool = mp.ProcessPool(1) 
def _worker(fx): 
    return fx[0](fx[1],fx[2]) 

이 오류가 발생하는 이유를 디버깅하는 나의 시도에서, 나는 한 개체의 목록을 매핑 시도했습니다. 이 t1.getValue 적용 할 수있는 고가의 기능은 어디

>>> map(_worker, izip([t1.getValue], repeat(a_all), repeat(penalties))) 
[-0.34375] 

멀티 프로세싱없이 작동합니다. 동일한 두 인수에 적용되는 이러한 expesive 함수의 전체 목록이 있습니다. . 흥미로운 무엇

>>> 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은 막후의 큰 구조를 처리합니다.

답변

-1
당신은 같은 재귀의 한계를 증가 sys.setrecursionlimit()를 사용하려고 할 수

:

import sys 
sys.setrecursionlimit(1000000) 
+0

이 끔찍한 생각하고 증상을 해결하지만 문제 – avigil