Курс 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. Распаковка аргументов в Python
  2. Группировка элементов в словарь
  3. Генерация ключей RSA
  4. Отладка в Python
  5. Фильтрация списка чисел
  6. Работа с каталогами в Python
  7. Создание namedtuple из словаря
  8. Генераторы в Python
  9. Наследование в программировании
  10. Сравнение def и lambda функций в Python
  11. ROT13 Шифр Цезаря в Python
  12. Работа с контекстными менеджерами
  13. Antigravity модуль
  14. Вычисление фазы комплексного числа
  15. Создание словарей с defaultdict
  16. Псевдонимы в Python
  17. Непрерывная проверка в Python
  18. Преобразование в float
  19. Исключение NotImplementedError
  20. Итерация по итерируемым объектам
  21. Python Calendar Usage
  22. Операторы сравнения в Python
  23. Отрицательные индексы списков
  24. Создание функций с произвольным количеством аргументов
  25. Метод ne для сравнения объектов
  26. Метод ior для битовых операций
  27. Форматирование строк в Python
  28. Необязательные аргументы в Python
  29. Ограничение ресурсов в Python
  30. Синтаксис переменных цикла в Python
  31. Оператор is в Python
  32. Измерение времени выполнения в Python
  33. Метод get для словаря
  34. Ветвление выражения в Python
  35. Сложение матриц в NumPy
  36. Выключение компьютера с помощью Python
  37. Создание словарей в Python
  38. Итерация по копии коллекции
  39. Flask: создание веб-приложений
  40. Обработка исключений
  41. Работа с аргументами командной строки в Python
  42. Создание комплексных чисел
  43. Функции-генераторы в Python
  44. Логирование с Loguru

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