Курс Python → Ограничение ресурсов в Python
Для ограничения использования процессора и памяти в Python можно воспользоваться модулем resource. Для начала необходимо получить значения нежёсткого и жёсткого лимитов для конкретного ресурса (например, RLIMIT_CPU для ограничения использования процессора). Для этого можно воспользоваться функцией getrlimit, которая принимает в качестве аргумента константу, определяющую ресурс.
import resource
import signal
# Получаем значения нежёсткого и жёсткого лимитов для RLIMIT_CPU
soft_limit, hard_limit = resource.getrlimit(resource.RLIMIT_CPU)
Затем необходимо установить лимит, используя некоторое число секунд (или другую единицу измерения времени) в качестве аргумента. Для этого можно воспользоваться функцией setrlimit, передав ей новое значение нежёсткого лимита и ранее полученное значение жёсткого лимита.
# Устанавливаем лимит использования процессора в 5 секунд
resource.setrlimit(resource.RLIMIT_CPU, (5, hard_limit))
Далее необходимо зарегистрировать обработчик сигнала, который будет инициировать процедуру выхода из программы при превышении установленного лимита. Для этого можно воспользоваться модулем signal и функцией signal.signal, указав соответствующий сигнал (например, signal.SIGXCPU для превышения времени процессора).
# Регистрируем обработчик сигнала SIGXCPU
def signal_handler(signum, frame):
print("Превышено время использования процессора")
exit()
signal.signal(signal.SIGXCPU, signal_handler)
Для ограничения использования памяти можно также использовать модуль resource. После получения значений нежёсткого и жёсткого лимитов для нужного ресурса (например, RLIMIT_AS для ограничения использования памяти), необходимо установить ограничение с помощью функции setrlimit, передав размер ограничения и значение жёсткого лимита.
# Получаем значения нежёсткого и жёсткого лимитов для RLIMIT_AS
soft_limit, hard_limit = resource.getrlimit(resource.RLIMIT_AS)
# Устанавливаем лимит использования памяти в 100 МБ
resource.setrlimit(resource.RLIMIT_AS, (100 * 1024 * 1024, hard_limit))
Другие уроки курса "Python"
- Замена текста с помощью sub
- Замыкания в Python
- Метод rlshift для битового сдвига
- Сортировка HTML-элементов
- Функция enumerate() — Python
- Перезагрузка оператора в Python
- Порядок и длина множеств в Python
- Метод init в Python
- Объединение строк с помощью метода join
- Замена элементов в списке с помощью генераторов списков
- Разбиение текста в Python
- Метод get для словаря
- Оптимизация параметров в Python
- Метод __ixor__ для побитового исключающего ИЛИ
- Разделение строки с помощью split()
- Работа с collections в Python
- Python Enum Weekday Usage
- Управление контекстом с помощью декоратора contextmanager
- Определение имен функций
- Преобразование в float
- Преобразование Excel в PDF с Spire.XLS
- Python 3.12: Псевдонимы типов
- Метод join() для объединения элементов
- Проверка условий: all и any
- Измерение потребления памяти при сортировке
- Pretty-printing JSON в Python
- Присвоение и ссылки
- Работа с утверждениями в Python
- Печать календаря
- Присвоение значений переменным в Python
- Функция sleep() в Python
- Создание виртуальной среды
- Обход дочерних элементов BeautifulSoup
- Хранение переменных в Python.
- Работа с deque из collections
- Проверка версии Python
- F-строки в Python 3.8
- Преобразование символов в нижний регистр
- Функция zip() для объединения списков
- Работа с Colorama
- List Comprehension Tutorial
- Профилирование кода
- Оператор объединения словарей
- Конвертация коллекций в Python.
- Показ всплывающих окон Tkinter
- Доступ к локальным переменным
- Хранение переменных в словаре.
- Избегание изменяемых аргументов















