Курс 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"

  1. Метод getitem для доступа к элементам последовательности
  2. Функция reduce() из модуля functools
  3. Многострочные комментарии в Python
  4. Проблема с изменяемыми аргументами
  5. IPython и Jupyter Notebook: руководство
  6. Вывод переменной и строки в Python
  7. Создание детектора плагиата
  8. Обработка аргументов Python
  9. Передача аргументов в Python
  10. Модуль future Python
  11. Оператор деления для класса Rational
  12. Форматирование строк в Python
  13. Форматирование строк с % в Python
  14. Работа с collections.Counter
  15. Метод splitlines() для разделения строк
  16. Преобразование числа в список цифр
  17. Разделение строк в Python
  18. Методы и функции в Python
  19. Именованные срезы в Python
  20. Создание и инициализация объектов
  21. Оператор объединения словарей
  22. Модуль subprocess: запуск внешних команд
  23. Удаление элементов из списка в Python
  24. Создание вложенного генератора
  25. Генераторы по генератору
  26. Работа с типами данных в Python с помощью pydantic.
  27. Изменение списка срезами
  28. Заказ карты Тинькофф Black
  29. Проверка вхождения подстроки
  30. Лямбда-функции в Python
  31. Руководство по использованию Colorama
  32. Просмотр атрибутов и методов класса
  33. Округление дробей в Python
  34. Поиск индекса элемента
  35. Принцип одной функции
  36. Функции all() и any() в Python
  37. Оптимизация интернирования строк
  38. Комментарии в Python
  39. Оператор морж в Python 3.8
  40. Сравнение def и lambda функций в Python
  41. Работа с набором данных CIFAR10 в PyTorch
  42. Создание новых функций с помощью functools.partial
  43. Цикл for с enumerate() в Python
  44. Оператор «not» в Python

Marketello читают маркетологи из крутых компаний