有没有办法在交互式PyDev会话中设置允许的最大RAM使用率?如果我意外地输入导致RAM使用膨胀的命令,我的计算机往往会挂起。
答案 0 :(得分: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
,MemoryError
被提出,因为memory_hog
占用了太多空间。如果没有调用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会话,而不仅仅是一个命令。