私はconcurrent.futures.ProcessPoolExecutorを使用してコードのいくつかのインスタンスを一度に実行しています。走っている間、私はインスタンスを監視したい。私はfuture.running()とfuture.done()関数を使っています。私は、最小限の例を書いた:concurrent.futuresの状態が実際の状態を反映していない
def dummy_solver(i):
sleep(random()*5)
return i
def foo():
with concurrent.futures.ProcessPoolExecutor(max_workers=2) as pool:
number_of_jobs = 6
futures = [None] * number_of_jobs
for job_number in range(len(futures)):
futures[job_number] = pool.submit(dummy_solver, job_number)
while True:
msg = ""
for future in futures:
if future.running() is True:
part_msg = "Job Running "
if future.done() is True:
part_msg = "Job Done, Result:" + str(future.result())
msg = msg + " | " + part_msg
print("\r" + msg, end="")
sleep(1)
これは6つのジョブを起動し、一度に2つのジョブ上で動作することができますPoolExecutorにそれらを置きます。できるだけ早く私がfooを開始するように、これは私がコンソール上に得るものです:
| Job Running | Job Running | Job Running | Job Running | Job Running | Job Running
これは、すべてのプロセスが同時に実行されていることを示しています。私はそれらのうちの2つだけが一度に動くべきだと思う。私は間違って何をしていますか?