asyncio 延迟任务
时间: 2024-10-09 22:10:27 浏览: 22
`asyncio` 是Python的一个并发库,专用于编写异步I/O密集型程序。其中,延迟任务通常通过 `asyncio.sleep()` 函数来实现。这个函数接受一个时间参数(以秒为单位),然后让当前协程暂停运行指定的时间。例如:
```python
import asyncio
async def delayed_task():
await asyncio.sleep(5) # 等待5秒
print("Task completed after a delay")
# 调用延迟任务
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(delayed_task())
finally:
loop.close() # 关闭事件循环
```
在这个例子中,`delayed_task` 将会在执行到 `await asyncio.sleep(5)` 时暂时挂起,直到5秒过后才会继续执行剩余代码。`asyncio.sleep()` 的返回值是一个Future对象,可以用来取消任务或者等待其完成。
相关问题
在Python中如何使用asyncio库进行异步编程?
在Python中,`asyncio`是一个用于编写并发代码的重要库,它支持协程(coroutines)和事件循环(event loop),使得可以进行高效的I/O密集型任务处理。以下是使用`asyncio`进行异步编程的基本步骤:
1. **导入模块**:首先需要导入`asyncio`模块和其他相关的模块,如`asyncio.sleep()`用于模拟延迟。
```python
import asyncio
```
2. **定义协程函数**:使用`async def`关键字声明协程函数,它们可以包含`await`关键字来等待某个任务完成。
```python
async def my_coroutine():
print("Coroutine started")
await asyncio.sleep(1) # 模拟耗时操作
print("Coroutine finished")
```
3. **创建任务**:将协程作为`asyncio.create_task()`或`asyncio.gather()`、`asyncio.run()`等函数的参数,来启动一个新的任务。
```python
loop = asyncio.get_event_loop() # 获取当前运行的事件循环
task = asyncio.create_task(my_coroutine()) # 或者直接 asyncio.run(my_coroutine())
```
4. **调度事件循环**:调用`run_until_complete()`或`create_task()`后,你需要开始事件循环,直到所有任务完成。
```python
try:
loop.run_until_complete(task)
except KeyboardInterrupt:
pass
finally:
loop.close()
```
5. **异常处理**:在使用`asyncio`时,别忘了处理可能出现的异常,并使用`asyncio.exceptions.CancelledError`来取消未完成的任务。
在实际应用中,`asyncio`经常配合`asyncio.Queue`、`asyncio.Event`等同步工具一起使用,以更好地组织和控制异步任务。
阅读全文