在Pydev中设置交互会话的最大RAM使用量

3 投票
1 回答
540 浏览
提问于 2025-04-20 06:27

有没有办法在交互式的PyDev会话中设置一个最大允许的内存使用量?因为我的电脑有时候会卡住,如果我不小心输入了一个命令,导致内存使用量飙升。

1 个回答

3

在Unix系统中,你可以通过使用resource.setrlimit来限制程序可以使用的资源(比如内存)。举个例子,如果你想把地址空间的最大值限制为10**6字节,可以这样做:

import sys
import resource

resource.setrlimit(resource.RLIMIT_AS, (10 ** 6, 10 ** 6))
memory_hog = {}
try:
    for x in range(10000):
        memory_hog[str(x)] = 'The sky is so blue'
except MemoryError as err:
    sys.exit('memory exceeded')
    # memory exceeded

当你调用resource.setrlimit时,如果memory_hog占用了太多空间,就会出现MemoryError错误。如果不调用resource.setrlimit,程序应该会正常结束(在一般的硬件上)。


你还可以限制程序可以使用的总CPU时间,方法是:

resource.setrlimit(resource.RLIMIT_CPU, (n, n))

这里的n是以秒为单位的。例如,

In [1]: import math

In [2]: x = math.factorial(40000)

In [3]: import resource

In [4]: resource.setrlimit(resource.RLIMIT_CPU, (2, 2))

In [5]: x = math.factorial(40000)

Process Python killed

程序被终止了,因为它在2秒内无法计算40000!


需要注意的是,这两个命令会影响整个PyDev会话,而不仅仅是某一个命令。

撰写回答