並列化したプログラム全体のプログラスバーを表示させる
以前,Pythonのプログラムを並列化による高速化を実装した際に,全体の進捗状況が確認出来たら便利だな~と思って調べたのですが,ググっても日本語記事は出てきませんでした.
出てきても並列処理それぞれの進捗を表示させるみたいなのしかなかった…(なお,並列化した関数から値を返すとなったらなおさら)
なので,自分で実装したコードの例を備忘録として記事にしておこうと思いました.
ここでの並列化は multiprocessing を想定しており,全体としては主に三段構造になっています.
今回は例として0から10までのリストを作って,それらの二乗の値を返すプログラムにしています.
状況によって適宜変更して下さい.
使用するライブラリ
from multiprocessing import Pool #並列処理
from tqdm import tqdm
並列化させる関数
def func(param_list):
param_list = [x**2 for x in param_list]
return param_list
並列処理を実行する関数
def parallel_processing(param_list):
with Pool(processes=10) as pool:
results = []
with tqdm(total=len(param_list)) as pbar:
for result in pool.imap(func, param_list):
results.append(result)
pbar.update(1)
return results
プログラム本体
param_list = [n for n in range(10)]
square_list = parallel_processing(param_list):
# 確認する
print(param_list)
print(square_list)
ここでは,processes で並列処理の数を10に設定しています.
pool の imap で関数 func とパラメータ param_list を渡して,それらと同じ順番で二乗した値を返します.
もしうまく動作しなかった場合はコメントしていただければ嬉しいです.