【发布时间】:2017-08-02 04:22:39
【问题描述】:
我有一个生产代码大量使用了 asyncio.semaphore 模块,该模块被怀疑存在死锁问题。
我已经找到了一些解决方案,如何使用 unix 信号附加到正在运行的 python 代码,使用ipdb.set_trace() 进行调试,并使用asyncio.Task.all_tasks() 列出事件循环中的所有任务。我可以进一步检查每个任务的堆栈帧或查看ipdb 上的期货当前待处理的每一行协程吗?
【问题讨论】:
-
每个任务都有方法
Task.get_stack()。也许这就是你要找的。span> -
@Qeek 感谢您的想法。
[*map(asyncio.Task.print_stack, asyncio.Task.all_tasks())]工作正常。 -
仅供参考。在 python 3.7 中,您可以使用
asyncio.all_tasks()而不是asyncio.Task.all_tasks()asyncio.Task.all_tasks()已弃用,将在 python 3.9 中删除
标签: python-3.x debugging semaphore python-asyncio ipdb