Python 为什么';t concurrent.futures.ThreadPoolExecutor()。是否立即提交回报?
在此代码中:Python 为什么';t concurrent.futures.ThreadPoolExecutor()。是否立即提交回报?,python,concurrency,python-multithreading,Python,Concurrency,Python Multithreading,在此代码中: import concurrent.futures import time def pafter(t): time.sleep(t) print('Hi') with concurrent.futures.ThreadPoolExecutor(5) as e: e.submit(pafter, 2) print('With returned') 我希望看到: With returned Hi 但我明白了: Hi With returned 为什么
import concurrent.futures
import time
def pafter(t):
time.sleep(t)
print('Hi')
with concurrent.futures.ThreadPoolExecutor(5) as e:
e.submit(pafter, 2)
print('With returned')
我希望看到:
With returned
Hi
但我明白了:
Hi
With returned
为什么
提交不立即返回?我应该更改什么使其这样做?使用with
语句相当于调用executor.shutdown()
,:
关机(等待=True)
向执行者发出信号,在执行当前挂起的期货时,它应该释放它正在使用的任何资源。关闭后调用Executor.submit()和Executor.map()将引发RuntimeError
如果wait为True,则此方法将不会返回,直到所有挂起的未来都已执行完毕,并且与执行器关联的资源已释放。。如果wait为False,则此方法将立即返回,并且当所有挂起的未来都执行完毕时,将释放与执行器关联的资源。不管wait的值是多少,整个Python程序都不会退出,直到所有挂起的未来都执行完毕
如果使用with语句,则可以避免显式调用此方法,该语句将关闭执行器(就像在wait设置为True时调用EXCEUTOR.shutdown()一样等待)
粗体部分解释了您看到的行为;submit()
调用确实会立即返回,但是with
语句将被阻止,直到所有提交的工作完成。要更改它,您不需要使用with
语句,而是显式调用shutdown(wait=False)