为什么这种递归不会超过递归限制

时间:2019-08-05 04:09:42

标签: python multithreading recursion

首先,我想使用threading.Timer进行无限循环,之后,我担心递归函数会超出Python中的递归限制,但是,在按如下所示进行测试后,我发现递归函数将永远执行。为什么会这样?

import threading
recursion_count=0
def recursion(count):
    count=count+1
    print("recursion_count:  %d\n"%count)
    t = threading.Timer(0.1, recursion, (count,))
    t.start()
if __name__=='__main__':
    recursion(recursion_count)

1 个答案:

答案 0 :(得分:0)

不超过任何递归限制的简单原因是双重的:

  1. 如上所述,堆栈递归限制是每个线程的。由于您正在启动新线程,因此不适用于它们。
  2. 递归地分配新线程也不会超出线程限制,因为您最多只能同时运行两个线程。一个线程创建一个新线程(该线程最初在100ms内不执行任何操作)然后终止。

如果要超出限制,请等待每个启动的线程从启动它的线程中完成。