Курс 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"
- Метод getitem для доступа к элементам последовательности
- Функция reduce() из модуля functools
- Многострочные комментарии в Python
- Проблема с изменяемыми аргументами
- IPython и Jupyter Notebook: руководство
- Вывод переменной и строки в Python
- Создание детектора плагиата
- Обработка аргументов Python
- Передача аргументов в Python
- Модуль future Python
- Оператор деления для класса Rational
- Форматирование строк в Python
- Форматирование строк с % в Python
- Работа с collections.Counter
- Метод splitlines() для разделения строк
- Преобразование числа в список цифр
- Разделение строк в Python
- Методы и функции в Python
- Именованные срезы в Python
- Создание и инициализация объектов
- Оператор объединения словарей
- Модуль subprocess: запуск внешних команд
- Удаление элементов из списка в Python
- Создание вложенного генератора
- Генераторы по генератору
- Работа с типами данных в Python с помощью pydantic.
- Изменение списка срезами
- Заказ карты Тинькофф Black
- Проверка вхождения подстроки
- Лямбда-функции в Python
- Руководство по использованию Colorama
- Просмотр атрибутов и методов класса
- Округление дробей в Python
- Поиск индекса элемента
- Принцип одной функции
- Функции all() и any() в Python
- Оптимизация интернирования строк
- Комментарии в Python
- Оператор морж в Python 3.8
- Сравнение def и lambda функций в Python
- Работа с набором данных CIFAR10 в PyTorch
- Создание новых функций с помощью functools.partial
- Цикл for с enumerate() в Python
- Оператор «not» в Python















