我在调试多进程应用程序时遇到问题(特别是在 python 的多处理模块中使用进程池)。我有一个明显的僵局,我不知道是什么原因造成的。堆栈跟踪不足以描述该问题,因为它仅显示多处理模块中的代码。
是否有任何 python 工具或其他用于调试死锁的通用技术?
我在调试多进程应用程序时遇到问题(特别是在 python 的多处理模块中使用进程池)。我有一个明显的僵局,我不知道是什么原因造成的。堆栈跟踪不足以描述该问题,因为它仅显示多处理模块中的代码。
是否有任何 python 工具或其他用于调试死锁的通用技术?
是的,调试死锁很有趣。您可以将日志记录级别设置为更高——请参阅Python 文档以获取其描述,但速度非常快:
import multiprocessing, logging
logger = multiprocessing.log_to_stderr()
logger.setLevel(multiprocessing.SUBDEBUG)
此外,为您的代码中处理资源或可能存在争用之类的任何内容添加日志记录。最后,在黑暗中射击:在导入期间产生子进程可能会导致问题。
为了避免死锁,学习好的实践很有用,因为并行处理确实非常微妙。(免费)信号量小书是一本非常有趣的书!