如何让异步任务忽略 CancelledError

How to make asyncio tasks ignore CancelledError

如果客户端关闭连接,asyncio 任务接收 CancelledError 并且请求处理停止。有没有办法完成所有任务并忽略连接错误?

您可以通过 asyncio.Task.all_tasks() 获得所有 运行 个任务。要完成任务,您应该对其调用 cancel() 并等待任务完成(抑制 CancelledError)。完整解决方案:

pending = asyncio.Task.all_tasks()
for task in pending:
    task.cancel()
    with suppress(asyncio.CancelledError):
        await task