排查 asyncio 任务莫名结束时,先把调试信息开起来,通常比盯着主协程日志省事。
PYTHONASYNCIODEBUG=1 python -X dev app.py
也可以在代码里开:
import asyncio
async def main():
loop = asyncio.get_running_loop()
loop.set_debug(True)
await asyncio.sleep(0.01)
print("debug mode:", loop.get_debug())
asyncio.run(main())
环境:Python 3.11+。它会更积极地提示未等待的协程、慢回调和不当的跨线程操作;-X dev 还会收紧一些运行时检查。线上别长期打开,日志量和开销都会上来。