递归 tkinter 调用的限制是什么?



在我学习Python和tkinter的过程中,我有时会发现这样的模式,我刚刚从一本关于tkinter的书中提取了这种模式:

def manage_periodic_updates_during_play(self):
    self.update_clock()
    self.update_seek_bar()
    self.root.after(1000, self.manage_periodic_updates_during_play)

我知道这是一种在指定时间后以递归方式重复某些步骤的方法,我什至在项目中使用过这种模式。但我想知道可以进行这种递归调用的次数是否有限制。我的意思是,可能Python正在保留某种关于哪个函数或方法称为wich的参考。所以,也许在几百或几千个周期内,我们可以达到这个极限。

在这种情况下,我们应该考虑这样的限制吗?如果是这样,什么才算是好的做法?我们如何知道将允许多少次递归调用以及如何避免应用程序变得无响应或返回一些错误?

以这种方式使用不是递归。您只需将作业推送到队列中即可。没有限制,因为对于从队列中拉出的每个项目,您只向队列添加一个项目。假设这是您执行此操作的唯一位置,并且您只启动一次,则队列永远不会超过一个。

这样做没有限制 -它并不完全是"递归的"——每次函数运行时,你只需创建一个事件来调用同一个函数。

如果函数实际上直接调用自身,而不诉诸使用 Tkinter(ir 其他框架(事件系统的调度 - 那么你将被限制为 cPython 的默认递归限制,即 1000 次调用。但是通过这种方式,在调用 root.after 解析后,yoru functina ctuly 结束(并返回隐式的"None"( - 是 tkinter 事件循环将对其进行下一次调用,而不是函数本身。

最新更新