调试并列出将来在python asyncio中挂起的所有协同程序

时间:2017-08-02 04:22:40

标签: python-3.x debugging semaphore python-asyncio ipdb

我有一个大量使用asyncio.semaphore模块的生产代码,怀疑它有死锁问题。 我已经找到了一些解决方案,如何使用unix信号附加到运行python代码,使用ipdb.set_trace()进行调试,并使用asyncio.Task.all_tasks()列出事件循环上的所有任务。我是否可以进一步检查每个任务的堆栈框架或查看ipdb上的期货当前待处理的每一个协程线?

1 个答案:

答案 0 :(得分:0)

正如OP观察到的那样,可以通过

获得进一步的检查
[*map(asyncio.Task.print_stack, asyncio.Task.all_tasks())]

(OP当然可以免费self-answer。)