在Pydev中设置交互会话的最大RAM使用量
有没有办法在交互式的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会话,而不仅仅是某一个命令。