2014-09-07 2 views
3

Есть ли способ установить максимально допустимое использование ОЗУ в интерактивном сеансе PyDev? Мой компьютер имеет тенденцию висеть, если я случайно нахожу команду, которая приводит к разбуханию ОЗУ.Установка максимального использования ОЗУ в интерактивном сеансе в Pydev

ответ

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 программа должна завершиться нормально (на типичном оборудовании).


Вы также можете ограничить доступное с общее процессорное время:

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 

Процесс был убит, так как он не может вычислить 40000! в течение 2 секунд.


Обратите внимание, что обе эти команды влияют на весь сеанс PyDev, а не только на одну команду.

+0

К сожалению, это не работает на моей машине, так как я нахожусь в Windows. Есть ли решение для Windows? – Ginger

+1

Извините, я не знаю эквивалентного решения для Windows. – unutbu