space 程序多次更改标签的问题
problem in the space of program changing label many times
我正在做一个程序,每 25 分钟给用户一次关注,然后给他 5 分钟的休息时间,一切都很好,可以用少量时间(少于 2 分钟)测试代码,但是当我测试它时真正的 25 分钟,它给了我这个错误:
RecursionError: maximum recursion depth exceeded
我认为我需要改变递归深度,然后我改变了它:
sys.setrecursionlimit(1000000)
然后它真的超过了 2 分钟,但是当它达到大约 10 分钟时,程序就被杀死了!
我猜这是因为程序占用了很大的 space 内存或类似的东西,但我该如何解决这个问题!!?
我会尽量简要地给你主要的功能,这样你就可以理解这个想法::
sec=1500
count=0
def run():
global sec
global count
m,s=divmod(sec,60)
if sec >=0:
m,s=divmod(sec,60)
lblmin.config(text=str(m).zfill(2))
lblsec.config(text=str(s).zfill(2))
sec -= 1
if sec==-1:
count += 1
if count%2 ==0 : #to know if the timer will do 5 min or 25 min
confstr=messagebox.showinfo("stert?","timer will start now")
if confstr:
sec=1500
else: #for break
runbreak=False
if runbreak == False:
root.attributes("-topmost", True)
ask=messagebox.askyesno("break","break for 5 min")
runbreak=True
if runbreak:
sec=300
root.after(1000,run)
root.mainloop()
也许(正如我所想的那样)是因为 lblmin 和 lblsec 正在改变的巨大时间,但我真的不不知道如何解决这个问题。
请帮忙:(
Python没有针对尾递归进行优化,这个article.
里面有解释
实际上这意味着 python 限制函数可以调用自身的次数(如果不这样做,最终会出现堆栈溢出)。您可以像使用 setrecursionlimit
一样更改该限制,但从根本上说,该限制将始终存在。
我建议您重构代码,改为使用 while 循环来保持循环。
我正在做一个程序,每 25 分钟给用户一次关注,然后给他 5 分钟的休息时间,一切都很好,可以用少量时间(少于 2 分钟)测试代码,但是当我测试它时真正的 25 分钟,它给了我这个错误:
RecursionError: maximum recursion depth exceeded
我认为我需要改变递归深度,然后我改变了它:
sys.setrecursionlimit(1000000)
然后它真的超过了 2 分钟,但是当它达到大约 10 分钟时,程序就被杀死了!
我猜这是因为程序占用了很大的 space 内存或类似的东西,但我该如何解决这个问题!!?
我会尽量简要地给你主要的功能,这样你就可以理解这个想法::
sec=1500
count=0
def run():
global sec
global count
m,s=divmod(sec,60)
if sec >=0:
m,s=divmod(sec,60)
lblmin.config(text=str(m).zfill(2))
lblsec.config(text=str(s).zfill(2))
sec -= 1
if sec==-1:
count += 1
if count%2 ==0 : #to know if the timer will do 5 min or 25 min
confstr=messagebox.showinfo("stert?","timer will start now")
if confstr:
sec=1500
else: #for break
runbreak=False
if runbreak == False:
root.attributes("-topmost", True)
ask=messagebox.askyesno("break","break for 5 min")
runbreak=True
if runbreak:
sec=300
root.after(1000,run)
root.mainloop()
也许(正如我所想的那样)是因为 lblmin 和 lblsec 正在改变的巨大时间,但我真的不不知道如何解决这个问题。
请帮忙:(
Python没有针对尾递归进行优化,这个article.
里面有解释实际上这意味着 python 限制函数可以调用自身的次数(如果不这样做,最终会出现堆栈溢出)。您可以像使用 setrecursionlimit
一样更改该限制,但从根本上说,该限制将始终存在。
我建议您重构代码,改为使用 while 循环来保持循环。