Python 线程: "sys._current_frames()" 与 "threading.enumerate()

4 投票
2 回答
1397 浏览
提问于 2025-04-17 06:13

我有一个程序,它会创建多个子进程(这里用的是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版本中应该会被修复。

撰写回答