Pythonで並列処理入門
入門編でやれること
リストを順に処理するときに並列で処理したい!
data_list = ["a", "b", "c", "d"] for i in data_list: #Do something
こういうのをコア数に応じて並列で処理してさくっと終えたい。ときに使える。
どうやるか
from multiprocessing import Pool data_list = ["a", "b", "c", "d"] def wrapper_main(nakami): #Do something myprocess = Pool() myprocess.map(wrapper_main, data_list) myprocess.close()
実際に書く量はほとんど変わらない。もちろん、ひとつのリストの中身だけで完結することが大前提(並列処理って言ってるしね)。
少しずつ見ていきたい。
from multiprocessing import Pool
これで呼び出し
def wrapper_main(nakami): #Do something
本来やりたい処理をここに入れる。変数nakamiはdata_listの中身のこと。ラッパーを書くときは、リストを引数に与えるのではなくリストの中身を与えた場合の処理を書く。
myprocess = Pool()
myprocess.map(wrapper_main, data_list)
myprocess.close()
これはほとんどおまじない。Poolの中に例えばPool(12)とすると12コアだけ使ってくれる。何も入れないとフルで使うことになる。 肝心なのはプロセスオブジェクト.map(関数名, リスト)という使い方。
これさえ守ればあっという間にマルチプロセスができる。
コアごとに違う処理を押し付けたい場合やwrapperの引数が二次元リストだったり複数あったりする場合は中級編として既存のブログ等を参考にすればできる。マルチスレッドとマルチプロセスの違いなども割愛。