python3.7
並列処理で扱う関数について、他の引数を動的に扱うためにlambda式を導入してみたが、"lambda's can't be pickled" とかなんとか言われてしまい、実行できない。
そこで関数オブジェクトなるものを定義して、lambda式の代わりにこいつを呼び出す形にするとうまくいくらしい。
例
class Temp(object): def __init__(self, arg) pass #定義時には何もしない def __call__(self, list): return your_func(list) #呼び出される際に関数実行 # Pool map で実行 p = multiprocessing.Pool(n) results = p.map(Temp(args), list)
0 件のコメント:
コメントを投稿