前提
concurrent.futuresのsubmitを用いてマルチプロセスを実行する。
実現したいこと
プログレスバーをプロセス分出力させたいです。例えば、以下のコードの場合、num_process分プログレスバーを出力させたいです。
例:
0: 90%████████████████████ | 9/10 [09:00<01:00, 60.00s/it]
1: 90%████████████████████ | 9/10 [09:00<01:00, 60.00s/it]
2: 90%████████████████████ | 9/10 [09:00<01:00, 60.00s/it]
このように、それぞれのプロセスでの進捗状況が見られるようにしたいです。
発生している問題
1つのプログレスバーが上書きされて出力される。
例えば、以下のコードの場合で、1個目のプロセスがfor文の中の任意の処理を一回終えると次のような出力がターミナル上にでます。
0: 10%█ | 1/10 [01:00<09:00, 60.00s/it]
次に、2個目のプロセスがfor文の任意の処理を一回終えますが、この進捗が出力される場合、上記のプログレスバーがターミナル上から消去され、次のような出力がターミナル上に出ます。
1: 10%█ | 1/10 [01:00<09:00, 60.00s/it]
したがって、見かけ上では1つのプログレスバーが上書きされるようになってしまいます。
該当のソースコード
Python
1import tqdm 2import concurrent.futures 3 4def f(idx): 5 n = 10 6 for i in tqdm(range(n), desc=str(idx)): 7 # 任意の処理 8 return 9 10if __name__ == '__main__': 11 num_process = 3 12 executor = concurrent.futures.ProcessPoolExector(max_workers=num_process) 13 for idx in range(num_process): 14 executor.submit(f, idx) 15

回答1件
あなたの回答
tips
プレビュー