Python的sys模块provides a function setrecursionlimit允许您更改Python的最大递归限制.文档说:
The highest possible limit is platform-dependent.
我的问题是:在CPython下,各种平台的最高限制是多少?我想知道Linux,Mac和Windows的价值.
更新:我们可以避免“你做错了”的答案吗?我知道尝试进行非常深度的递归通常是一个坏主意.我已经考虑了我的具体情况的利弊,并决定我想这样做.
解决方法:
在Windows上(至少),sys.setrecursionlimit不是完整的故事.硬限制是基于每个线程的,您需要调用threading.stack_size并在达到某个限制后创建一个新线程. (我认为1MB,但不确定)我已经使用这种方法将其增加到64MB堆栈.
<code>import sys
import threading
threading.stack_size(67108864) # 64MB stack
sys.setrecursionlimit(2 ** 20) # something real big
# you actually hit the 64MB limit first
# going by other answers, could just use 2**32-1
# only new threads get the redefined stack size
thread = threading.Thread(target=main)
thread.start()
</code>
我没有试过看看threading.stack_size可能存在什么限制,但可以随意尝试……这就是你需要看的地方.
总之,sys.setrecursionlimit只是解释器本身强制执行的限制. threading.stack_size允许您操纵OS强加的实际限制.如果你先达到后一个限制,那么Python就会完全崩溃.
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!