wait() 方法的详细设置
时间: 2023-10-08 22:11:38 浏览: 188
`wait()` 方法是 `asyncio` 模块中的一个协程,用于等待一组异步任务完成。它的详细参数和用法如下:
```python
async def wait(fs, *, loop=None, timeout=None, return_when=ALL_COMPLETED):
"""
Wait for the Futures and coroutines given by fs to complete.
Return two sets of Future: (done, pending).
"""
```
参数说明:
- `fs`: 一个 `Future` 或可迭代对象,包含一组 `Future` 或协程对象。
- `loop`: 事件循环对象,用于执行协程和处理异步任务。如果未指定,则使用默认事件循环。
- `timeout`: 超时时间,单位是秒。如果指定了超时时间,`wait()` 方法会在指定时间内等待所有任务完成,如果超时则抛出 `asyncio.TimeoutError` 异常。如果未指定超时时间,则会一直等待直到所有任务完成。
- `return_when`: 等待条件,可以是以下四种值之一:
- `FIRST_COMPLETED`: 等待任意一个任务完成后就返回。默认值。
- `FIRST_EXCEPTION`: 等待任意一个任务抛出异常后返回。
- `ALL_COMPLETED`: 等待所有任务完成后返回。
- `ALL_EXCEPTIONS`: 等待所有任务都抛出异常后返回。
`wait()` 方法返回两个 `Future` 集合:已完成的任务集合和未完成的任务集合。这两个集合都是 `set` 类型。
示例代码:
```python
import asyncio
async def some_async_task():
# 这里是异步任务的代码
await asyncio.sleep(1)
print("async task completed")
async def main():
tasks = []
for i in range(5):
task = asyncio.create_task(some_async_task())
tasks.append(task)
done, pending = await asyncio.wait(tasks, timeout=2)
print("done tasks:")
for task in done:
print(task)
print("pending tasks:")
for task in pending:
print(task)
asyncio.run(main())
```
在这个示例中,我们创建了 5 个异步任务,并将它们添加到任务列表 `tasks` 中。然后我们使用 `asyncio.wait()` 方法来等待所有异步任务完成,设置超时时间为 2 秒钟。
当所有异步任务完成或者超时后,程序会输出已完成的任务集合和未完成的任务集合。在这个示例中,我们使用 `for` 循环遍历这两个集合,并输出每个任务的信息。
输出结果如下:
```
async task completed
async task completed
done tasks:
<Task finished coro=<some_async_task() done, defined at test.py:4> result=None>
<Task finished coro=<some_async_task() done, defined at test.py:4> result=None>
pending tasks:
<Task pending coro=<some_async_task() running at test.py:4>>
<Task pending coro=<some_async_task() running at test.py:4>>
<Task pending coro=<some_async_task() running at test.py:4>>
```
这说明前两个异步任务已经完成,而后三个任务还在运行中。
阅读全文