Python ValueError:不允许提高最大限制

时间:2012-04-14 16:33:25

标签: python memory stack-overflow

我在mac os 10.7.3上使用python 2.7.2

我在python中进行递归算法,递归级别超过50 000。

我试图将最大递归级别增加到1 000 000但我的python shell仍然在18 000递归级别后退出。

我尝试增加可用资源:

import resource 
resource.setrlimit(resource.RLIMIT_STACK, (2**29,-1))
sys.setrecursionlimit(10**6)

我收到此错误:

Traceback (most recent call last):
  File "<pyshell#58>", line 1, in <module>
    resource.setrlimit(resource.RLIMIT_STACK,(2**29,-1))
ValueError: not allowed to raise maximum limit

我不知道为什么我不能提高最高限额?

感谢您的建议。

2 个答案:

答案 0 :(得分:6)

来自python文档:

  

如果指定了无效资源,则引发ValueError(如果是新软件)   限制超过了硬限制,或者如果一个进程试图提高其难度   限制(除非进程具有超级用户的有效UID)。能够   如果底层系统调用失败,也会引发错误。

由此我猜你尝试新的软限制太大了。您可能需要将算法重写为迭代。 Python并不是真的设计用来处理像这样的大规模递归。

答案 1 :(得分:2)

虽然编写一个更有效的算法可能是一个更好的主意,但你可以通过以root身份运行python来提高硬限制(如文档中所述)。

如果执行为root,您实际上可以使用以下行将堆栈大小设置为无限制:

import resource
resource.setrlimit(resource.RLIMIT_STACK, (resource.RLIM_INFINITY, resource.RLIM_INFINITY))