我们如何检测线程何时在 Python 应用程序中运行?
动机:我们最近调试了一个大型 Python 应用程序,该应用程序有几个客户提供的模块,这些模块没有提供源代码。我们(和我们的客户!)不知道,这些模块之一会在非常特定(且未记录)的条件下启动线程。这些线程引起了意想不到的副作用,以意想不到的方式改变了我们的环境。如果不是我的团队坚持找出副作用的来源,整个调试场景会很有趣 :)
当其中一个线程引发 Uncaught Error 时,我们终于发现了发生了什么。如果没有发生这种情况,我们仍然会很苦恼。
因此,这就是我们寻找一种方法来检测应用程序中是否存在线程的原因。
以下是我们提出的一些可能的技术和相应的挑战:
线程/线程的 Grep 源代码。挑战:我们并不总是能够访问源代码。即使我们可以在源代码中找到创建线程的实例,我们仍然需要一种实时技术来检测线程当前何时处于事件状态。
在 sys.modules 中查找线程或线程。挑战:仅确保这些模块已加载 - 不能证明线程当前正在运行。
Monkey-patch Python 标准线程/线程库,为我们留下关于何时创建线程的线索。挑战:仅告诉我们是否已创建线程 - 不提供有关线程当前是否正在运行的任何信息。
谢谢! 马尔科姆
最佳答案
调试器
通常,调试器可以向您显示所有线程以及每个线程正在执行的操作。如果您告诉我们您使用的是哪个调试器,有人可以告诉您如何查看线程信息。如果您不使用调试器,我强烈建议您开始。在没有真正调试器的情况下调试多线程程序非常容易出错且效率低下。就个人而言,我使用 WingIDE .
运行时
如果您只是在解释器中四处寻找或试图检测代码中的这种情况,也许 sys._current_frames()
可能有帮助。它返回每个线程的堆栈帧。
关于python - 检测线程何时在 python 应用程序中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2351989/