gpt4 book ai didi

python-3.x - Python 异步功能

转载 作者:行者123 更新时间:2023-12-01 02:37:49 25 4
gpt4 key购买 nike

我正在尝试了解异步功能在 Python 中的工作原理。我看过无数视频,但我想我没有“明白”。我的代码如下所示:

def run_watchers():
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(watcher_helper())
loop.close()

async def watcher_helper():
watchers = Watcher.objects.all()

for watcher in watchers:
print("Running watcher : " + str(watcher.pk))
await watcher_helper2(watcher)

async def watcher_helper2(watcher):
for i in range(1,1000000):
x = i * 1000 / 2000

对我来说有意义的是拥有三个功能。第一个开始循环,第二个循环执行不同的选项,第三个完成工作。

我期待以下输出:

Running watcher : 1
Running watcher : 2
...
...

Calculation done
Calculation done
...
...

但是我得到:

Running watcher : 1
Calculation done
Running watcher : 2
Calculation done
...
...

这显然表明计算不是并行完成的。知道我做错了什么吗?

最佳答案

asyncio 只能用于加速多个网络 I/O 相关功能(通过互联网发送/接收数据)。当您等待来自网络的一些数据(这可能需要很长时间)时,您通常处于空闲状态。使用 asyncio 允许您将这段空闲时间用于另一项有用的工作:例如,启动另一个并行网络请求。

asyncio 无法以某种方式加速与 CPU 相关的工作(这是 watcher_helper2 在您的示例中所做的)。当您乘以一些数字时,根本没有空闲时间可以用来做一些不同的事情并从中获益。

另请阅读 this answer以获得更详细的解释。

关于python-3.x - Python 异步功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50135177/

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