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()
至少在Windows上,
sys.setrecursionlimit
不是全部。硬限制是基于每个线程的,您需要调用threading.stack_size
,并在达到某个限制后创建一个新线程。(我想是1MB,但不确定)我用这种方法把它增加到64MB的堆栈。我还没试过看
threading.stack_size
上有什么限制,但请随意尝试。。。那是你需要找的地方。总之,
sys.setrecursionlimit
只是解释器本身强制的一个限制。threading.stack_size
允许您操作操作系统施加的实际限制。如果先达到后一个限制,Python将完全崩溃。在CPython中不应该过度使用递归调用。它没有尾部优化,函数调用占用大量内存和处理时间。这些限制可能不适用于其他实现,它不在蓝图中。
在CPython中,递归对于遍历数据结构(对于每个人来说,1000的限制应该足够)来说是很好的,但对于算法来说则不行。如果我要实现,比如说,与图形相关的算法,并达到递归限制,我要么实现自己的堆栈并使用迭代,要么查找在用手提高极限之前在C/C++ ++中实现的库。
相关问题 更多 >
编程相关推荐