我正处于学习asyncio库的早期阶段。我从协同程序和任务开始,阅读docs中的hello world示例
根据关于协同路由的部分,似乎有两种主要的方式来运行协同路由对象:
- 在协同程序上使用
await
- 以asyncioTasks的形式运行协同路由
根据{a3}文件:
Tasks are used to run coroutines in event loops.
很清楚,这是否意味着事件循环不会运行协同路由对象,除非它们被包装到任务中?在这种情况下,这些协程对象是否只是同步运行,而不与事件循环进行任何交互
Tags:
这意味着任务是进入协同程序世界的入口点。每个协同程序都可以追溯到被外部协同程序等待,一直到由任务驱动的协同程序
以以下代码为例:
asyncio.run
隐式创建一个任务来驱动main
协程完成。该任务只“看到”通过调用main()
创建的协同路由对象,而与等待的协同路由main
无关。从任务的角度来看,main
将挂起两次,每次sleep
挂起一次。在挂起之前,sleep
协程将与事件循环一起安排要恢复的任务所有协同程序都必须与事件循环交互,因为它们必须能够挂起。如果它们被另一个协同路由等待,则会导致等待的协同路由暂停。这会传播到由任务运行的顶级协同路由,并导致任务挂起
相关问题 更多 >
编程相关推荐