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
在您的示例中所做的)。当你乘以一些数字时,根本没有空闲时间可以用来做一些不同的事情并从中获得好处。
另请阅读 以获得更详细的解释。
我正在尝试弄清楚 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
在您的示例中所做的)。当你乘以一些数字时,根本没有空闲时间可以用来做一些不同的事情并从中获得好处。
另请阅读