Курс 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. Применение команды break
  2. Приближение чисел в Python
  3. Транспонирование 2D-массива с помощью zip
  4. Импорт модуля из другого каталога
  5. Работа с zip()
  6. Работа с модулем random
  7. Сортировка данных с лямбда-функциями
  8. Работа с zip-архивами в Python
  9. Сортировка и разворот списка
  10. Метод __complex__ в Python
  11. Работа с массивами в Python
  12. Enum в Python
  13. Проверка списка: any() и all()
  14. Метод pop() списка
  15. Фильтрация списков с itertools
  16. Руководство по Pymorphy2
  17. Проверка наличия элемента в списке
  18. Встроенные функции Python
  19. Избегайте пустого списка
  20. Метод pos в Python
  21. Оператор is в Python
  22. Обработка ошибок ввода данных
  23. Работа с модулем bisect
  24. Создание объекта timedelta
  25. Форматирование кода на Python
  26. Работа со временем в Python
  27. Декоратор защиты анонимных пользователей
  28. Тестирование модели в PyTorch
  29. Извлечение чисел из текста
  30. Метод join для наборов
  31. Циклы for в Python
  32. Работа с изменяемыми коллекциями
  33. Бесконечная проверка в Python
  34. Использование метода lower()
  35. Решение переменной Шредингера
  36. Переменные класса и экземпляра
  37. Необязательные аргументы в Python
  38. Преобразование чисел в восьмеричную строку
  39. Поиск кода
  40. Освоение Python
  41. Работа с словарями в Python
  42. Переворот строки с использованием цикла
  43. Определение объема памяти объекта
  44. Отправка поздравлений по дню рождения
  45. Отображение графиков в Jupyter с Matplotlib
  46. Обмен переменными в Jupyter
  47. Цикл for в Python

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