python: joblibで並列計算

joblibを使って並列計算するときの例

zipして引数を複数取る時

from joblib import Parallel, delayed

def func(a, b):
    return a * b
result = Parallel(n_jobs=-1)([delayed(func)(a, b) for a, b in zip([a_list, b_list])])

result[i]に1つ1つの結果が入っている。

2重ループ

from joblib import Parallel, delayed

def func(i, j):
    return i+j
result = Parallel(n_jobs=-1)([delayed(func)(i, j) for i in range(10) for j in range(10)])

result[i]に1つ1つの結果が入っている。

返り値が複数ある時は

def func(i, j):
   return i, j, i+j
result = Parallel(n_jobs=-1)([delayed(func)(i, j) for i in range(10) for j in range(10)])

result[i][0], result[i][1], result[i][2]でそれぞれの値が見れる。

引数

n_jobs: 使うスレッドの数