Python异步功能

时间:2018-05-02 12:54:22

标签: python-3.x python-asyncio

我正在试图弄清楚异步功能在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
...
...

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

1 个答案:

答案 0 :(得分:2)

&::-internal-media-controls-download-button { display: none !important; } 只能用于加速多个网络I / O相关功能(通过互联网发送/接收数据)。当您从网络等待一些数据(这可能需要很长时间)时,您通常会闲置。使用asyncio允许您将此空闲时间用于另一个有用的作业:例如,启动另一个并行网络请求。

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

另请阅读this answer以获取更详细的说明。