在使用并发.futures模块时,需要在提交任务后关闭线程池,如果没有关闭线程池,会导致程序一直等待线程池中任务全部完成才能结束。可以通过使用with语句来自动关闭线程池,如下所示:
import concurrent.futures
import time
def foo(num):
time.sleep(num)
return num
with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
futures = [executor.submit(foo, i) for i in range(2)]
# do something else
当with语句执行完成后,线程池会自动关闭,不会出现长时间等待的问题。