在Python 2文档中,sys库包含以下内容(粗体部分是我的编辑):
sys.setrecursionlimit(limit)
将Python解释器堆栈的最大深度设置为limit。此限制可防止无限递归导致C堆栈溢出并导致Python崩溃。
可能的最高限制取决于平台。当用户需要深度递归的程序和支持更高限制的平台时,用户可能需要设置更高的限制。这应该小心,因为过高的限制可能导致崩溃。
这是什么意思?这只是一个通用的“确保你有足够的内存来处理额外的堆栈空间”声明,还是有一个特定的“每堆栈帧”大小可以用来计算所需的内存值?当Python无法获取空间时会发生什么?
答案 0 :(得分:1)
为什么让我们发现:
me@host$ docker run -m 4MB --cpuset-cpus=0 -it --rm python:3.5.1
Python 3.5.1 (default, Dec 9 2015, 00:12:22)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys, struct
>>> maxint = 2 ** (struct.Struct('i').size * 8 - 1) - 1
>>> sys.setrecursionlimit(maxint)
>>> def goodbye_world():
... goodbye_world()
...
>>> goodbye_world()
me@host$
韦尔普。看起来它崩溃了Python。很快,当你只给它4MB的RAM时。