asyncio 始终循环
时间: 2023-08-30 11:09:30 浏览: 53
是的,asyncio使用事件循环(event loop)来驱动协程的执行。事件循环是asyncio框架的核心部分,它负责管理协程的调度和执行。
事件循环会不断地从任务队列中取出待执行的协程,并调度它们的执行。当一个协程被挂起(使用`await`关键字),事件循环会暂停它的执行,并将控制权交给其他协程。一旦挂起的条件满足(例如等待IO完成或等待定时器触发),事件循环会继续执行挂起的协程。
在asyncio中,我们可以通过调用`asyncio.run()`函数来启动一个事件循环并运行程序。事件循环会一直运行,直到所有的协程任务都完成或被取消。
除了使用`asyncio.run()`函数启动事件循环外,我们还可以使用`asyncio.get_event_loop()`获取当前线程的事件循环对象,并调用它的`run_forever()`方法来手动运行事件循环。在这种模式下,我们可以通过调用`stop()`方法来停止事件循环的运行。
下面是一个简单示例:
```python
import asyncio
async def hello():
while True:
print("Hello")
await asyncio.sleep(1)
async def main():
task = asyncio.create_task(hello())
await asyncio.sleep(5)
task.cancel()
asyncio.run(main())
```
上述代码定义了一个无限循环的协程函数`hello`,它每隔1秒打印"Hello"。在`main`函数中,我们使用`asyncio.create_task()`创建了一个任务,并等待5秒后取消它。
通过运行上述代码,你会发现协程`hello`会一直循环执行,直到被取消。这是因为事件循环会不断地调度协程的执行,使其始终保持循环状态。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)