概要
joblib
, multiprocessing
を利用して、プロセス並列計算をする時に、以下のようなエラーに遭遇した時の解決方法を紹介する。プロセス間通信に利用しているpickle化ができないことが原因である。
error1}
TypeError: cannot pickle 'SwigPyObject' object
error2}
PicklingError: Could not pickle the task to send it to the workers.
解決方法
pathos
を使用する。pip install pathos
でインストールできる。
code}
# some_func, some_listは適当に作成してください
from pathos.multiprocessing import ProcessingPool
pool = ProcessingPool(nodes=4)
result_list = pool.map(lambda x: some_func(x), some_list)
おまけ
保存の際のpickle化であれば、dill
を用いることで解決する。