Курс 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. Создание списков в Python
  4. Метод title() в Python
  5. Использование метода lower()
  6. Генератор чисел Фибоначчи
  7. Множественное наследование в Python
  8. Создание .exe файла с pyinstaller
  9. Удаление дубликатов в pandas
  10. Конкатенация строковых литералов
  11. Запуск внешних программ с subprocess
  12. Python Тесты и Гайды
  13. Изменяемые и неизменяемые объекты
  14. Изучение объектов с помощью dir()
  15. Генераторные функции в Python
  16. Переопределение метода __or__()
  17. Транспонирование матрицы в Python
  18. Подписка на SelectelNews в Twitter
  19. Оператор += для объединения строк
  20. Поиск подстроки в строке
  21. Применение функции к элементам списка
  22. Операторы увеличения и уменьшения переменной
  23. Сложение матриц в NumPy
  24. Конкатенация списков в Python
  25. Добавление элемента к кортежу
  26. Добавление элемента в список.
  27. Работа с очередями в Python
  28. Сериализация объектов в Python
  29. Операторы += в Python
  30. Ошибка NotImplemented в Python
  31. Создание списка через итерацию
  32. Работа с типами данных в Python с помощью pydantic.
  33. Сортировка слиянием
  34. Переопределение унарных операторов
  35. Объединение списков в Python
  36. Удаление элементов из списка в Python.
  37. Работа со временем в Python
  38. Python Enum Weekday Usage
  39. Замена подстроки
  40. Срез в Python
  41. Модуль pprint: улучшение вывода данных
  42. Подсчет элементов с помощью Counter из collections
  43. Запуск внешнего кода в Jupyter
  44. Генерация QR-кодов с Python
  45. Работа с JSON данными в Python

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