python async await用法
时间: 2023-08-29 14:11:39 浏览: 198
Python从使用线程到使用async/await的深入讲解
在 Python 中,`async` 和 `await` 是用于处理异步代码的关键字。它们结合使用可以简化异步代码的编写和阅读,类似于 JavaScript 中的用法。
要使用 `async` 和 `await`,需要遵循以下几个步骤:
1. 定义一个异步函数:使用 `async` 关键字定义一个异步函数。这个函数内部可以包含 `await` 表达式来等待其他异步任务的完成。
2. 使用 `await` 等待异步任务:在异步函数内部,使用 `await` 关键字等待一个异步任务的完成。这个异步任务可以是一个返回协程对象或者返回期望对象的可等待对象。
下面是一个简单的示例:
```python
import asyncio
async def fetch_data():
# 模拟一个异步任务
await asyncio.sleep(1)
return "Data"
async def main():
data = await fetch_data()
print(data)
# 创建一个事件循环并运行异步函数
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
在上面的示例中,我们定义了一个异步函数 `fetch_data()`,它模拟了一个耗时 1 秒的异步任务,并返回字符串 "Data"。接着,我们定义了一个名为 `main()` 的异步函数,在其中使用 `await` 等待 `fetch_data()` 函数的完成,并将结果赋值给 `data` 变量。最后,我们创建了一个事件循环并运行 `main()` 函数。
需要注意的是,必须在一个异步上下文中(如异步函数或协程)使用 `await`。如果在非异步函数中使用 `await`,会报错。
除了 `await`,还可以使用 `asyncio.gather()` 来同时等待多个异步任务的完成。这个函数接受一个可迭代对象,返回一个包含所有结果的列表。
下面是一个示例:
```python
import asyncio
async def task1():
await asyncio.sleep(1)
return "Task 1"
async def task2():
await asyncio.sleep(2)
return "Task 2"
async def main():
results = await asyncio.gather(task1(), task2())
print(results)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
在上面的示例中,我们定义了两个异步任务 `task1()` 和 `task2()`,它们分别模拟了耗时 1 秒和 2 秒的异步操作。在 `main()` 函数中,我们使用 `asyncio.gather()` 同时等待这两个任务的完成,并将结果保存在 `results` 列表中。最后,我们打印出结果。
这就是在 Python 中使用 `async` 和 `await` 处理异步代码的基本用法。希望对你有所帮助!
阅读全文