2019/03/16

python multiprocessing では lambda 無名関数は使えない。

参照

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