我一直在使用concurrent.futures,因为它具有简单的接口并且可以让用户轻松控制线程/进程的最大数量。然而,似乎concurrent.futures隐藏了失败的任务,并在所有任务完成/失败后继续主线程。
import concurrent.futures
def f(i):
return (i + 's')
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
fs = [executor.submit(f, i ) for i in range(10)]
concurrent.futures.wait(fs)
调用函数f时,无论输入的整数是什么,都会导致TypeError。然而,整个脚本都能够正常运行并以代码0退出。是否有任何方法可以在任何线程失败时抛出异常/错误?
或者,有没有更好的方法来限制线程/进程的数量而不使用concurrent.futures?