在 asyncio 包中,await 和 wait 都用于处理异步任务,但它们的用途和语义有显著的区别:
1. await
- 用途:
await是一个关键字,用于在协程中暂停执行,直到异步操作完成并返回结果。
- 使用场景:
- 适用于调用其他异步函数。使用
await时,调用的函数必须是一个协程。
- 适用于调用其他异步函数。使用
- 示例:
import asyncio async def fetch_data(): await asyncio.sleep(1) # 模拟异步操作 return "数据" async def main(): result = await fetch_data() print(result) asyncio.run(main())
2. asyncio.wait
- 用途:
asyncio.wait是一个函数,用于等待一组协程或未来对象的完成。它返回一个包含已完成和未完成任务的集合。
- 使用场景:
- 适用于需要同时等待多个任务的场景。可以控制等待的方式,比如选择等待所有任务完成或只等待第一个完成。
- 示例:
import asyncio async def fetch_data(id): await asyncio.sleep(1) # 模拟异步操作 return f"数据{id}" async def main(): tasks = [fetch_data(i) for i in range(3)] done, pending = await asyncio.wait(tasks) # 等待所有任务完成 for task in done: print(task.result()) asyncio.run(main())
总结
await是用于暂停当前协程,直到某个异步操作完成,而asyncio.wait用于等待一组协程的完成,提供更灵活的任务管理方式。- 使用
await时,通常是单个任务的直接调用,而asyncio.wait更适合同时处理多个任务的场景。