首页 > 解决方案 > 为什么这种递归不会超过递归限制

问题描述

首先我想用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)

标签: pythonmultithreadingrecursion

解决方案


这不超过任何递归限制的简单原因有两个:

  1. 如前所述,堆栈递归限制是每个线程。由于您正在启动新线程,因此它不适用于它们。
  2. 递归生成新线程也不会超过线程限制,因为您最多只能同时运行两个线程。一个线程创建一个新线程(最初在 100 毫秒内不做任何事情),然后终止。

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


推荐阅读