Python 线程: "sys._current_frames()" 与 "threading.enumerate()
我有一个程序,它会创建多个子进程(这里用的是Celery Workers)。我想要获取每个进程中所有正在运行的线程的堆栈信息。我使用了sys._current_frames()
来获取堆栈信息,并用threading.enumerate()
来获取线程的名称。
但我发现,在我的子进程中,出现的“堆栈帧”数量比实际的线程还要多。这正常吗?这些是从创建子进程时留下的“残余”吗?还是说这是Python的一个bug?(我在Mac OS X上测试的)
谢谢,
Z
2 个回答
1
首先,sys._current_frames的文档解释了一些内容。
这个函数应该仅用于内部和特殊的目的。
所以,这其实不是你应该随便去碰的东西。关键的答案来自于threading.enumerate的文档。
这个列表包括了守护线程、由current_thread()创建的虚拟线程对象,以及主线程。
3
这是一个叫做bug 17094的问题。这个问题在后来的Python版本中应该会被修复。