Курс 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"
- Лямбда-функции для min/max
- Сортировка списка по индексам
- Избегайте пустого списка
- Приоритет операций в Python
- Экспорт данных в файл.
- Создание обратного итератора
- JMESPath в Python
- Функция format() в Python
- Декоратор @override
- Делегирование в Python
- Присоединение элементов коллекции
- Перегрузка операторов в Python
- Оптимизация памяти с slots
- Группировка элементов Python
- Псевдонимы в Python
- Defaultdict в Python
- Измерение потребления памяти при сортировке
- Хранение переменных в Python.
- JSON-esque в Python
- Работа с файлами в Python
- Преобразование Word в PDF с Spire.Doc
- Использование двоеточия в Python
- Функции-генераторы в Python
- Принципы Zen Python
- Поиск самого частого элемента
- Переменная Шредингера
- Срез списка в Python
- Отделение звука от видео
- Создание вложенного генератора
- Асинхронное выполнение задач в Python
- Нахождение разницы между списками в Python
- Сортировка и разворот списка
- Поиск самого длинного слова в списке с использованием max()
- Итераторы в Python
- Статическая типизация в Python
- Удаление элемента по индексу
- Считывание бинарного файла в Python
- Метод pop() списка
- Просмотр атрибутов и методов класса
- Роль запятой в Python
- Извлечение аудио из видео
- PEP-401: оператор
- Структуры данных в Python
- HTTP-запросы с библиотекой Requests
- Преобразование данных в Python
- Вычисление разности множеств в Python
- Библиотека Chartify: руководство















