Python asyncio.shield:内层任务受到保护,为什么外层 await 仍然被取消 一个调用方在等待后台整理任务时被取消,希望后台任务完成手头的小段工作,于是把await换成asyncio.shield。结果调用方仍抛出CancelledError,很容易误以为保护没有生效。此时应分别检查两个任务:... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python asyncio.wait 超时:等待已经返回,为什么任务稍后仍然完成了 后台任务被交给 asyncio.wait,并设置等待超时。调用方已经拿到返回值,过一会儿却发现任务仍更新了结果。wait 的超时结束的是这一次等待,不会自动取消尚未完成的任务,也不会因此抛出 TimeoutError... yunqueblog/ 技术教程/ 2026-10-02/ 4 阅读
Python ContextVar:任务创建后,父任务改值为什么不会传过去 日志中的请求编号从哪里来一个异步服务同时处理几份文档,底层日志函数想知道当前属于哪次请求。逐层传入编号很清楚,但调用链很深时,也可以用 ContextVar 保存随执行上下文传播的少量信息。它的关键问题是:在哪个时点... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Python TaskGroup 失败与取消:让并发任务结束得可验证 一项请求同时启动几项相关工作时,最难处理的往往不是全部成功,而是其中一项失败后,其余任务还在运行。Python 3.11 引入的 TaskGroup 把这些任务收进同一个异步上下文:退出时等待组内任务结束,并把失败带... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读