python ThreadPoolExecutor:提交任务后,如果任务失败,线程会死吗?

时间:2016-11-22 09:25:14

标签: python multithreading

我有以下代码:

我的问题是:如果check_running_job的函数引发异常并且没有在check_running_job中捕获它,那么它会导致运行check_running_job的线程死掉吗?因此,如果我将max worker作为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 个答案:

答案 0 :(得分:1)

ThreadPoolExecutor线程通过完成任务或引发异常干净地完成 ;一个引发的异常不会阻止该线程或阻止另一个工作者被分配给它,并且会将.done()干净地设置为True,就像任务已正确完成一样。

(您可能已经意识到这一点,但是如果您尝试访问失败的任务的.return()方法,则会引发其异常 - 因此应始终访问返回值try ... except结构。如果您的代码需要知道任务是成功完成还是失败,这是一种方法。)