我不明白为什么这段代码的行为方式不同。在第一种情况下,代码将打印“elo”,19 秒后我们将看到“3”。
在其他情况下,我们将首先等待 19 秒,然后我们将看到“elo”。
你能给我解释一下吗?
from concurrent.futures import ThreadPoolExecutor
def wait_on_future():
f = 3
import time
time.sleep(19)
print(f)
executor = ThreadPoolExecutor(max_workers=2)
executor.submit(wait_on_future)
print("elo")
vs
from concurrent.futures import ThreadPoolExecutor
def wait_on_future():
f = 3
import time
time.sleep(19)
print(f)
with ThreadPoolExecutor(max_workers=2) as executor:
executor.submit(wait_on_future)
print("elo")
您的第一个程序没有显式关闭池。您通过以下方式提交任务executor.submit()
,这是一个非阻塞调用。您的主程序立即处理打印语句并挂起,直到所有线程在 19 秒后完成。
您的第二个程序使用 with 语句,在这种情况下该语句是阻塞的。with ThreadPoolExecutor()
有一个隐含的shutdown(wait=True)
,并且它会阻塞在那里,直到所有线程完成处理。看https://docs.python.org/3/library/concurrent.futures.html https://docs.python.org/3/library/concurrent.futures.html
这使得您的程序 1 的功能与程序 2 相同:
executor = ThreadPoolExecutor(max_workers=2)
executor.submit(wait_on_future)
executor.shutdown(wait=True)
print("elo")
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)