Python 异步功能

Python Async Functionality

我正在尝试弄清楚 Python 中的异步功能是如何工作的。我看过无数视频,但我想我不是 'getting it'。我的代码如下所示:

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 相关功能(send/receive 数据通过互联网)。当您等待来自网络的一些数据(这可能需要很长时间)时,您通常处于空闲状态。使用 asyncio 允许您将这段空闲时间用于另一项有用的工作:例如,启动另一个并行网络请求。

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

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