eb0a4005e1
celery_tasks 经 asyncio.run 每任务新建事件循环,而 asyncpg 连接绑定 创建它的循环。db_manager 引擎只连一次(is_connected 短路),QueuePool 把上一循环的连接缓存着流入新循环:任务报 "got Future attached to a different loop" 全部 failed,连接销毁时再报 "Event loop is closed"(ForkPoolWorker 日志连续复现)。 celery_tasks 对 redis 已有同因处理(每任务 reconnect()),DB 侧漏了。 改法:connect(role="celery") 用 NullPool——连接不缓存,每次 checkout 在当前循环新建、用完即关。web 入口(单循环 uvicorn)QueuePool 不变。 已实测:同进程三个连续 asyncio.run 循环共享引擎,全部查询成功。 Co-Authored-By: Claude Code <noreply@anthropic.com>