前提・実現したいこと
Python3.7のconcurrent.futures.ProcessPoolExecutorを使用して
次の様な処理を作成しました。
Python3
1def run(): 2 executor = concurrent.futures.ProcessPoolExecutor(max_workers=2) 3 executor.submit(func, 1) 4 executor.submit(func, 2) 5 executor.submit(func, 3) 6 executor.submit(func, 4) 7 8def func(no: int): 9 while True: 10 print("func-{}".format(no)) 11 time.sleep(1)
ターミナルから上記のrun()を実行した際、func()の出力は
Termnal
1func-1 2func-2 3func-1 4func-2 5...
と、同時に起動しているプロセス数(/追加したタスク数)が
max_workersで指定した2個になっているのは確認できました。
この上記を実行している状態で、もう一つターミナルを開いて上記run()コマンドを実行すると、
新しいターミナルでもfunc-1,func-2・・・と出力されています。
つまりこの状態では同時に4つのプロセスが起動している事になるかと思います。
このターミナルを分けて起動した場合でも、並行して起動されるプロセス数に制限をかける
方法はありますでしょうか。
目的としては現在Pythonで開発中のWEBシステム(Flask)にて、重い処理をプロセスを分けて非同期で処理させたい(+処理が終わるのを待つ必要も無い)為、処理が発生したタイミングでシェルコマンドを叩いてプロセスプールにタスクを追加して順に処理させたいと考えています。
よろしくお願いいたします。
あなたの回答
tips
プレビュー