Python线程:“sys._current_frames()”vs“threading.enumerate()”

时间:2011-11-13 10:22:10

标签: python multithreading celery

我有一个程序,它会分叉许多子进程(就此而言,它正在使用Celery Workers)。我正在尝试转储每个进程中所有正在运行的线程的堆栈跟踪。我正在使用sys._current_frames()来获取堆栈跟踪,使用threading.enumerate()来获取线程名称。

出于某种原因,我注意到,在我的分叉子流程中,我有比实际线程更多的“帧”。这是正常的吗?这些只是叉子的“剩菜”吗?这是Python中的错误吗? (在Mac OS X上测试,用于记录)

谢谢, ž

2 个答案:

答案 0 :(得分:2)

这是bug 17094。它应该在以后的Python版本中修复。

答案 1 :(得分:0)

sys._current_frames的文档稍微解释了一下 首先

  

此功能仅用于内部和专门用途。

所以它不是你应该戳的东西。关键答案来自threading.enumerate文档

  

该列表包括守护线程,由current_thread()创建的虚拟线程对象和主线程。