当前位置: 代码迷 >> python >> 减少执行帧的堆栈跟踪
  详细解决方案

减少执行帧的堆栈跟踪

热度:99   发布时间:2023-06-19 09:23:59.0

我正在竭尽所能,不要在这里含糊其词,所有这些都可以通过while循环解决,但是作为练习,我违背了使用while循环的最佳实践,以期希望学习新知识。

我正在重新学习CPU体系结构的一些基础知识,并认为用“实际的” JMP逻辑或在软件中尽可能接近它来实现CPU仿真将是一个有趣的项目。

但是,我陷入了上述逻辑的渲染过程。 该代码与该问题无关(根据我的最佳判断) ,但是为了避免倒数第二,逻辑如下:

.LDA 0220
.ASL
.BCC FA

所有这一切都会检查一个寄存器,如果状态标志设置正确,则会向左移一个位,并跳到存储器地址FA ,否则将跳回到.LDA并再次检查寄存器。

python中的实现对代码中每个步骤的递归函数都相同。 不用说,这超出了最佳实践的范围,但是我认为这对递归和调用顺序是一个有趣的实验。

如果我的数学运算退出,在python停止之前,我将进行16 280次递归调用,而在大约3秒钟后,仅返回到命令提示符。

我已经做了sys.setrecursionlimit(self.dotcount*self.linecount)来增加递归限制,但这里的目标是能够执行81600个递归(340x240像素,每像素粗略地进行一次递归调用)

根据 这是一个坏主意,因为框架很大,所以我尝试纠正这个问题是:

for tb in inspect.stack():
    tb.frame.clear()

我也尝试过(绝对不能)使用traceback.clear_frames(tb)
死胡同用RuntimeError: cannot clear an executing frame击中了我RuntimeError: cannot clear an executing frame

我最后的求助/问题是:是否有可能减少执行框架,以允许我知道会以圆满结局进行的更多递归调用? 我看不到我什至快要用完RAM,并且应用程序甚至还没有运行到明显慢的速度(我预计在某个时候速度会变慢)

如果是这样,我如何释放堆栈跟踪或进一步增加递归深度?

因此,Python本身没有直接进行尾递归的机制。 但是,有一些有趣的应该会有所帮助。 他们通过在再次进入递归调用之前编辑调用堆栈来进行工作。 非常聪明!

  相关解决方案