2

パトスと並列化しようとしているタスクがあります。非並列バージョンを実行すると、正常に実行されます。ただし、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舞台裏でいくつかの大きな構造を処理します。

4

1 に答える 1