Parallel Python モジュール ( pp
) を使用しており、ワーカーにジョブを送信したいと考えています。しかし、実行したい関数は別のモジュール (Cython で作成) にあり、関数名を新しいワーカーにインポートする方法がわかりません。ここで提案されている方法、つまり関数内にモジュール「walkerc」をインポートすることはできません。これは、walk 自体が walkerc でファイル名「walkerc.so」から定義されているためです。
import pp
from walkerc import walk
# Other stuff here
ser = pp.Server()
# Some more definitions
ser.submit(walk, (it, params))
ser.submit(walk, (1000, params), modules = ("walkerc",), globals = globals())
上記のステートメントは両方とも失敗し、次のエラーが発生します。
トレースバック (最新の呼び出しが最後):
ファイル ""、1 行目、ser.submit(walk, (1000, params)、modules = ("walkerc",)、globals = globals()) 内
ファイル "/usr/lib/python2.7/site-packages/pp.py"、458 行目、送信 sfunc = self.__dumpsfunc((func, ) + depfuncs, modules)
ファイル "/usr/lib/python2.7/site-packages/pp.py"、629 行目、__dumpsfunc のソース = [self.__get_source(func) for func in func]
ファイル "/usr/lib/python2.7/site-packages/pp.py"、696 行目、__get_source sourcelines = inspect.getsourcelines(func)[0] 内
ファイル "/usr/lib/python2.7/inspect.py"、690 行目、getsourcelines 行、lnum = findsource(object)
ファイル「/usr/lib/python2.7/inspect.py」、526行目、findsource file = getfile(object)
ファイル "/usr/lib/python2.7/inspect.py"、420 行目、getfile の '関数、トレースバック、フレーム、またはコード オブジェクト'.format(object))
TypeError: '<'組み込み関数 walk'>' は、モジュール、クラス、メソッド、関数、トレースバック、フレーム、またはコード オブジェクトではありません
関数 'walk' 自体はメイン プログラム内で適切にインポートされますが、問題があるのはそれを新しいワーカーに送信するプロセスです。
関数名「walk」を正しく指定するにはどうすればよいですか? Cython で変更してパフォーマンスを向上させたいので、呼び出したのと同じファイルで 'walk' を定義したくありません。代替手段はありますか?