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 件のコメント:
コメントを投稿