避免最大递归深度

时间:2014-01-04 14:36:37

标签: python python-2.7 recursion

我有以下代码将在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()

2 个答案:

答案 0 :(得分:3)

关于第一个函数 - 只需将所有内容放在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

答案 1 :(得分:2)

请注意,您的第二个函数不是递归 - 它永远不会触发递归深度错误。是的,planIncr已传递给threading.Timer,但未通过该调用执行planIncr稍后由其他某个线程执行,并且以planIncr开头的调用planIncr的线程会立即返回。