Jupyter Notebook だと joblib 利用時に print が出力されない問題

Published: 2022/8/3


joblib は python において並列処理を実現するにあたってのデファクトスタンダードだが、これを Jupyter Notebook 上で実行した際は、並列化している関数の中で呼ばれた print が、 notebook 上に出力されない、という問題がある。

# print が無視されるコード
from joblib import Parallel, delayed
Parallel(n_jobs=8)(delayed(print)(i) for i in range(10))

原因は、 joblib の並列化バックエンドのデフォルト選択肢である loky が、 jupyter の notebook 出力と相性が悪いため。 なので、以下のように並列化の際のバックエンドに multiprocessingthreading を利用することで、期待通りに print で notebook 上に出力を行うことができる。

from joblib import Parallel, delayed
Parallel(n_jobs=8, backend='multiprocessing')(delayed(print)(i) for i in range(10))

# # 出力
# 0123
# 547
# 68
#
#
#
#
# 9
#
#
# [None, None, None, None, None, None, None, None, None, None]

参考


Tags: jupyter-notebookjoblib

関連記事