gpt4 book ai didi

Python3 并发 future 似乎无法异步工作

转载 作者:行者123 更新时间:2023-11-28 22:30:05 24 4
gpt4 key购买 nike

我是 python 的新手,只是尝试一个简单的线程示例。但我自己无法解释为什么这段代码是同步工作的:

from concurrent.futures import ThreadPoolExecutor
import time

def return_after_3_secs():
time.sleep(3)
return

def callback_method(future):
print ("Hello World.")

with ThreadPoolExecutor(2) as pool:
future = pool.submit(return_after_3_secs)
future.add_done_callback(callback_method)

print ("1")
time.sleep(1)
print ("2")
time.sleep(1)
print ("3")

print (future.result())

我基本上来自 C#,并且将 future 视为 C# 中的 Task。所以这是新线程的句柄或标记。

我希望得到以下输出:

  1. 1
  2. 2
  3. 3
  4. Hello World.
  5. None

但是我得到:

  1. Hello World.
  2. 1
  3. 2
  4. 3
  5. None

在打印内容之前,控制台等待 3 秒。所以这段代码是同步运行的。有人可以帮助我理解 future 并告诉我为什么 time.sleep(3) 不在第二个线程上运行吗?

最佳答案

with ThreadPoolExecutor(..) 之后的语句在 with .. 语句完成之后执行。

(因为 with ThreadPoolExecutor(..) 内部调用 executor.shutdown(wait=True) 等待未完成的 future 完成,相关资源被释放。见 concurrent.futures.Executor.shutdown )

通过在 with 语句中缩进这些语句(printtime.sleep),您将得到想要的结果。

with ThreadPoolExecutor(2) as pool:
future = pool.submit(return_after_3_secs)
future.add_done_callback(callback_method)

print ("1")
time.sleep(1)
print ("2")
time.sleep(1)
print ("3")

关于Python3 并发 future 似乎无法异步工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42622386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com