LoginSignup
2
2

More than 3 years have passed since last update.

関数を並列処理で実行する

Posted at

一つの関数に引数をとって、引数の値によって並列処理させる方法は良い記事がたくさんでてきます。

Pythonの並列処理・並行処理をしっかり調べてみた

ただ、開発する中で既に定義されている、引数を取らない複数の関数を並列処理する方法があまりでてこなかったので(ユースケースが少ないのかもひしれませんが)、まとめてみます

コードはGithubにもあがっています

今回並列処理にjoblibを用いているので、install済でない方はinstallしておきましょう

pip install joblib

まずは複数の関数をただ順番に実行していく関数の定義です。

def run_func(*funcs):
    [f() for f in funcs]

次に、この関数を並列処理させます。

from joblib import Parallel, delayed

def parallel_process_func(*target_funcs):
    Parallel(n_jobs=-1)([delayed(run_func)(func) for func in target_funcs])

n_jobsは同時処理数で、-1のときはできるだけマシンのコアを使って並列処理させます。たとえば3にすれば3並列処理となります。

以上で完了です。実際に動かしてみましょう。

def x():
    print('-- x() START --')
    [i for i in range(10000000)]
    print('-- x() END --')


def y():
    print('-- y() START --')
    [i for i in range(10000000)]
    print('-- y() END --')

parallel_process_func(x, y)

実行すると以下のような出力となるはずです。

-- x() START --
-- y() START --
-- x() END --
-- y() END --

並列処理されてますね。

定義したparallel_process_func関数に、関数名をただ渡していけばいいだけなので使い勝手も悪くなさそうです

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2