多进程调试技巧
我在调试一个多进程的应用程序时遇到了麻烦(具体来说,是在使用Python的多进程模块中的进程池)。我发现程序出现了明显的死锁,但我不知道是什么原因导致的。堆栈跟踪信息不足以描述这个问题,因为它只显示了多进程模块中的代码。
有没有什么Python工具,或者其他通用的方法可以用来调试死锁问题呢?
2 个回答
12
为了避免死锁的发生,学习一些好的实践是很有帮助的,因为并行处理其实是个比较复杂的事情。一本免费的书《信号量小册子》(Little Book of Semaphores)读起来会很有趣!
46
是啊,调试死锁问题真是有趣。你可以把日志的级别调高一些——具体可以查看Python文档,里面有详细的说明,不过我简单说一下:
import multiprocessing, logging
logger = multiprocessing.log_to_stderr()
logger.setLevel(multiprocessing.SUBDEBUG)
另外,记得在你的代码中添加日志记录,特别是那些涉及到资源的部分,因为这些地方可能会出现竞争问题。最后,随便提一句:在导入模块的时候创建子进程可能会引发一些问题。