Курс 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. Оператор Walrus: правильное использование
  2. Метод __getitem__ в Python
  3. Измерение потребления памяти при сортировке
  4. Дефолтные параметры в Python
  5. Удаление знаков препинания в Python
  6. Установка и использование pyshorteners
  7. Pillow: работа с изображениями
  8. Defaultdict в Python
  9. Фильтрация элементов с помощью islice
  10. Преобразование данных в Python
  11. Базовые объекты Python
  12. Переворот строки с использованием цикла
  13. Аннотации типов в Python
  14. Библиотека funcy: удобные утилиты
  15. Настройка нарезки списков
  16. Многострочные комментарии в Python
  17. Передача аргументов через **arguments
  18. Частичное совпадение пользовательского ввода в Python 3.10
  19. Генераторы в Python
  20. Изменения в обработке логических значений
  21. Правила именования переменных
  22. Принципы LSP и ISP в Python
  23. Работа с индексами списков
  24. Вывод переменной и строки в Python
  25. Установка и использование howdoi
  26. Класс UserDict: дополнительная функциональность
  27. List Comprehension Tutorial
  28. Основные функции и модули Python
  29. Объединение строк с помощью метода join
  30. Комментарии в Python
  31. Создание новых списков в Python
  32. Переопределение метода __or__()
  33. Лямбда-функции в Python
  34. Сортировка с помощью key
  35. Замена символов в строке
  36. Concrete Paths в Python
  37. Списковое включение в Python
  38. Оптимизация памяти с slots
  39. Библиотека Rich: форматирование текста
  40. f-строки в формате строк
  41. Просмотр внешних файлов в %pycat
  42. Преобразование генераторов в циклы
  43. Стать Python-разработчиком
  44. Генераторы в Python

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