パトスと並列化しようとしているタスクがあります。非並列バージョンを実行すると、正常に実行されます。ただし、1 プロセスの pathos プールを実行すると、RuntimeError: maximum recursion depth exceeded が発生します。
例えば:
import pathos.multiprocessing as mp
pool = mp.ProcessPool(1)
def _worker(fx):
return fx[0](fx[1],fx[2])
このエラーが発生する理由をデバッグしようとして、1 つのオブジェクトのリストをマッピングしようとしました。これはマルチプロセッシングなしで機能します
>>> map(_worker, izip([t1.getValue], repeat(a_all), repeat(penalties)))
[-0.34375]
t1.getValue
適用される高価な関数はどこにありますか。同じ2つの引数に適用されるこれらの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
舞台裏でいくつかの大きな構造を処理します。