我正在学习concurrent.futures
(从threading
迁移过来),但我无法理解提交和等待工作的精确程度。
考虑以下代码,有两个线程开始,其中一个线程应该立即完成,而另一个线程无限期挂起。
我的期望是两个线程都将通过submit()
凝视,并且控件将立即交还给主程序。
在此之后,具有超时的wait()
将返回一个元组done
和not_done
线程(not_done
将是一个被超时强行中断的线程)。 / p>
import concurrent.futures
import time
def worker(wait_infinite):
if wait_infinite:
time.sleep(100)
with concurrent.futures.ThreadPoolExecutor() as executor:
inf = executor.submit(worker,True)
not_inf = executor.submit(worker,False)
res = concurrent.futures.wait([inf,not_inf],timeout=2)
print(res)
发生的情况是执行挂起在not_inf = executor.submit(worker,False)
上。 为什么不将控制权交还给主程序?