Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么这种递归不会';t超过递归极限_Python_Multithreading_Recursion - Fatal编程技术网

Python 为什么这种递归不会';t超过递归极限

Python 为什么这种递归不会';t超过递归极限,python,multithreading,recursion,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, (

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

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

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

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

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

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

  • 如果要超出限制,请等待每个启动的线程从启动它的线程开始运行。

    代码中是否存在中断递归的条件?简单地说:新线程,新递归限制。限制是为了保护你免于错误和边缘情况,它仍然允许你故意攻击自己的腿。我看不到有递归。你的代码中有没有条件破坏递归?简单地说:新线程,新递归限制。这个限制是为了保护你不犯错误和边缘案件,它仍然允许你故意射中自己的腿。我看不出有什么递归。