Mar*_*usz 3 python multithreading threadpoolexecutor
我不明白为什么这段代码的行为方式不同。在第一种情况下,代码将显示“ 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")
Run Code Online (Sandbox Code Playgroud)
与
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")
Run Code Online (Sandbox Code Playgroud)
您的第一个程序未明确关闭池。您使用提交任务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")
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。