这是一个深奥的纯 Python 问题。
我正在使用sys._current_frames()
. 即,我有一个sys._current_frames()
每秒运行一次的后台线程,将结果转储到一个文本文件中,然后我有一些 Python 代码可以从最常见到最少对回溯进行排序。
我见过的一个奇怪现象是这样的回溯:
File "/opt/foo/bar.py", line 1437, in __iter__ yield key
这yield
是我写的生成器。奇怪的是,这个回溯只有一帧。这怎么可能?另一个回溯有很多帧,要么来自进程的顶层,要么来自帧的顶层。这个单帧堆栈跟踪是什么意思?
我的一个理论是,这是生成器的冻结状态,在它产生一个值之后,它正在等待next
再次调用它。但我想我用一个单独的实验反驳了这个理论:我做了一个生成器,确保它被暂停,被调用 sys._current_frames()
,但我没有看到那种堆栈跟踪。
交互式爱情
相关分类