我不明白为什么这段代码的行为方式不同。在第一种情况下,代码将打印'elo',19秒后我们将看到'3'。
在其他情况下,我们将首先等待19秒,然后我们将看到'elo'。
你可以解释一下吗?base
VS
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")
答案 0 :(得分:5)
您的第一个程序未明确关闭池。您使用executor.submit()
提交任务,这是一项非阻止通话。你的主程序立即处理打印语句,然后挂起,直到所有线程在19秒后完成。
您的第二个程序使用with语句,在此上下文中是阻塞。 with ThreadPoolExecutor()
有一个隐式shutdown(wait=True)
,它会阻塞,直到所有线程都完成处理。见https://docs.python.org/3/library/concurrent.futures.html
这使您的program1在功能上与您的程序2相同:
executor = ThreadPoolExecutor(max_workers=2)
executor.submit(wait_on_future)
executor.shutdown(wait=True)
print("elo")
希望这会有所帮助。