Python モジュール: joblib
概要
- 並列計算をするためのモジュール
使い方
モジュールの読み込み
from joblib import Parallel, delayed
並列計算用の関数の作成
- 並列計算のためには、worker となる並列実行内容を記述した関数が必要となるので作成する。
from time import sleep def worker(i, n): sleep(n) return i
- 今回は、n 秒待機して、インデックス i を返す関数とする。
並列計算の実行 (呼び出し)
- 並列計算をリスト内包表記で記述する。
x = [5,2,6] results = Parallel(n_jobs = 4, verbose = 10)([delayed(worker)(i, n) for i, n in enumerate(x)]) print(results)
n_jobs
: 並列実行数 (今回は4
)。-1
ですべてのコアを使う。verbose
: 実行状況を表示する。数字は出力頻度。worker
: 前に定義した並列処理したい関数の名前(i, n)
: 関数に与える引数
- 結果
[0, 1, 2]
- この処理は、逐次処理すると、5 + 2 + 6 = 13 秒かかるが、並列処理しているので、最長の 6 秒しかかからない。
- 結果は、リストに順次格納される。
- joblib は内部で、関数を pickle 化して計算するらしいので、pickle 化できない引数 (クラスなど) 与えたり、関数内でグローバル変数を利用したりすると、
Can't pickle …
というエラーが現れる。