【发布时间】:2020-10-13 03:09:55
【问题描述】:
asyncio.create_task() 是做什么的?我查看了文档,似乎无法理解。让我困惑的一段代码是这样的:
import asyncio
async def counter_loop(x, n):
for i in range(1, n + 1):
print(f"Counter {x}: {i}")
await asyncio.sleep(0.5)
return f"Finished {x} in {n}"
async def main():
slow_task = asyncio.create_task(counter_loop("Slow", 4))
fast_coro = counter_loop("Fast", 2)
print("Awaiting Fast")
fast_val = await fast_coro
print("Finished Fast")
print("Awaiting Slow")
slow_val = await slow_task
print("Finished Slow")
print(f"{fast_val}, {slow_val}")
asyncio.run(main())
这给出了以下输出:
001 | Awaiting Fast
002 | Counter Fast: 1
003 | Counter Slow: 1
004 | Counter Fast: 2
005 | Counter Slow: 2
006 | Finished Fast
007 | Awaiting Slow
008 | Counter Slow: 3
009 | Counter Slow: 4
010 | Finished Slow
011 | Finished Fast in 2, Finished Slow in 4
我不太明白这是如何工作的。
- 不应该
slow_task直到完成后才能运行fast_coro,因为它从未在asyncio.gather中使用过 方法? - 我们为什么要
await slow_task? - 为什么在协程似乎已经启动后打印
Awaiting Slow? - 什么是真正的任务?我知道
gather正在做的是安排一个 任务。create_task据说会创建一个任务。
我们将不胜感激。谢谢!
值得一提的是,我对 Futures 知之甚少。
【问题讨论】:
-
如日志所示,立即执行了一个任务
标签: python python-3.x async-await python-asyncio