2016-11-22 5 views
0

私は、次のコードを持っている:python ThreadPoolExecutor:タスクをサブミットした後、タスクが失敗した場合にスレッドは消滅しますか?

私の質問です:check_running_jobの機能は、例外を発生し、check_running_jobでそれをキャッチしていない場合、それは死ぬcheck_running_job実行中のスレッドの原因になりますか?だから私は最大労働者は3として、それが死んだ後、2スレッドだけ将来の要求に応えることができますか?

with futures.ThreadPoolExecutor(max_workers = setting.parallelism_of_job_checking) as te: 
     while True: 
      cursor.execute(sql) 
      result = fetch_rows_as_dict(cursor) 
      for x in result: 
       id = x["id"] 
       te.submit(check_running_job, id,) 
      time.sleep(10) 

答えて

1

ThreadPoolExecutorスレッドそのタスクを終えることによってか、例外を発生させることにより、完全にきれいいずれか。発生した例外はスレッドをブロックしたり、別のワーカーが割り当てられないようにしたり、タスクが正常に完了したかのように、.done()を真に設定します。

(おそらくこれに気付いているかもしれませんが、失敗したタスクの.return()メソッドにアクセスしようとするとその例外が発生するため、戻り値へのアクセスは常にtry ... except構造体で行われます。あなたのコードは、タスクが正常に完了したか失敗したかを知る必要があります。これはその1つの方法です)

関連する問題