我有一个生产代码,它大量使用了asyncio.semaphore模块,该模块被怀疑存在死锁问题。 我已经找到了一些解决方案,说明如何使用 unix 信号附加到正在运行的 python 代码,使用ipdb.set_trace()
进行调试并使用asyncio.Task.all_tasks()
列出事件循环中的所有任务。我可以进一步检查每个任务的堆栈框架或查看当前由 Future onipdb
挂起的每一行协程吗?
正如OP所观察到的,可以通过以下方法进行进一步的检查
[*map(asyncio.Task.print_stack, asyncio.Task.all_tasks())]
(OP当然可以自由地自我回答。