25 분마다 사용자에게주의를 기울인 다음 5 분 휴식을주는 프로그램을하고 있습니다. 적은 시간 (2 분 미만)으로 코드를 테스트하는 데 모든 것이 잘되었지만 실제로 25 분 동안 테스트하면 이 오류가 발생합니다.
RecursionError : 최대 재귀 깊이를 초과했습니다.
재귀 깊이를 변경해야한다고 생각한 다음 다음과 같이 변경했습니다.
sys.setrecursionlimit(1000000)
그런 다음 실제로 2 분을 초과했지만 약 10 분에 도달했을 때 프로그램이 방금 죽었습니다!
프로그램이 메모리 등의 큰 공간을 차지하기 때문인 것 같지만 어떻게이 문제를 해결할 수 있을까요 !!?
이 아이디어를 이해할 수 있도록 주요 기능을 간략하게 설명하겠습니다.
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 이 바뀌는 엄청난 시간 때문일 수 있지만, 저는이 문제를 고칠 생각이 전혀 없습니다.
도와주세요:(
파이썬은 꼬리 재귀에 최적화되어 있지 않습니다 . 이 기사에 설명이 있습니다.
실제로 이것은 파이썬이 함수가 자신을 호출 할 수있는 횟수를 제한한다는 것을 의미합니다 (그렇지 않으면 결국 스택 오버플로가 발생할 것입니다). 을 사용하여이 제한을 변경할 수 setrecursionlimit
있지만 기본적으로 제한은 항상 존재합니다.
대신 순환 순환을 유지하기 위해 while 루프를 사용하도록 코드를 리팩터링하는 것이 좋습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다