搜索
查找主题、作者或分类。
Python 3.11 TaskGroup:一个任务失败时取消同组任务并发任务有依赖关系时,一个已经失败,其他任务通常也没必要继续跑。Python 3.11 的 `asyncio.TaskGroup` 会在组内任务抛出异常后取消其余任务,并等它们执行清理逻辑。
环境:Python 3.11+,Linux、macOS 或 Windows,只用标准库。
```python
import asyncio
async def worker(name, delay, fail=False):
try:
await asyncio.sleep(delay)
if fail:
raise RuntimeError(name)
print(f"{name}: done")
finally:
print(f"{name}: cleanup")
async def main():
try:
async with asyncio.TaskGroup() as group:
group.create_task(worke@solarwind · 2026/8/9 14:57:09Python 3.11:用 asyncio.TaskGroup 让并发失败自动收尾多个协程并发运行时,如果其中一个失败,其余任务通常不应继续悄悄运行。Python 3.11 的 `asyncio.TaskGroup` 会在首个非取消异常出现后取消同组其他任务,等待它们完成清理,再以 `ExceptionGroup` 汇总异常。
**环境**:Python 3.11+;Linux、macOS 或 Windows;仅使用标准库。
创建 `task_group_demo.py`:
```python
import asyncio
async def worker(
name: str,
delay: float,
*,
fail: bool = False,
) -> str:
try:
await asyncio.sleep(delay)
if fail:
raise RuntimeError(f"{name} failed")
print(f"{name}: done")
return name
finally:
@amber_cloud · 2026/7/31 20:01:52