【发布时间】:2021-03-17 15:57:32
【问题描述】:
我正在尝试了解 asyncio 的工作原理。至于 I/O 操作,我了解到当调用 await 时,我们在 EventLoop 中注册 Future 对象,然后调用 epoll 获取属于 Future 对象的套接字,准备给我们数据。在我们运行注册的回调并恢复函数执行之后。
但是,我无法理解的是,如果我们使用 await 而不是 I/O 操作会发生什么。 eventloop 如何理解该任务已完成?它是为此创建套接字还是使用另一种循环?它使用epoll吗?或者它不添加到Loop并用作生成器?
有一个例子:
import asyncio
async def test():
return 10
async def my_coro(delay):
loop = asyncio.get_running_loop()
end_time = loop.time() + delay
while True:
print("Blocking...")
await test()
if loop.time() > end_time:
print("Done.")
break
async def main():
await my_coro(3.0)
asyncio.run(main())
【问题讨论】:
标签: python python-3.x python-asyncio