簡體   English   中英

避免最大遞歸深度

[英]Avoding maximum recursion depth

我有以下代碼,它們將在24小時內運行,但是只有在10-20分鍾后,我才遇到錯誤,達到了最大遞歸深度。 我的代碼如下

def startEnd():
    flag = 0
    f = open('file')
    lq = f.readlines()
    cur2 = lq[0]
    cur1 = datetime.datetime.now()
    while flag == 0:
        if cur1 == cur2: # cur2 is datetime read from file
            q.put(True)
            flag = 1
        else:
            flag = 0
    startEnd()

如何避免以下代碼中的遞歸? 由於cur2值更改,我需要退出while循環。

我的另一個問題是,由於我的代碼需要24小時運行,因此從長遠來看,以下代碼也將導致遞歸深度錯誤。

def planIncr():
    f=open('input.txt')
    lines=f.readlines()
    cycle_time = int(lines[1])
    f.close()
    q2.put(True)
    threading.Timer(cycle_time, planIncr).start()

關於第一個功能-只需將所有內容放入while循環中即可:

def startEnd():
    while True:
        flag = 0
        f = open('file')
        lq = f.readlines()
        cur2 = lq[0]
        cur1 = datetime.datetime.now()
        while flag == 0:
            if cur1 == cur2: # cur2 is datetime read from file
                q.put(True)
                flag = 1
            else:
                flag = 0

請注意,您的第二個函數不是遞歸的-它永遠不會觸發遞歸深度錯誤。 是的, planIncr傳遞給threading.Timer ,但未通過該調用執行 planIncr稍后由其他某個線程執行,並且調用planIncr的線程首先看到planIncr返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM