Курс 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. Лямбда-функции для min/max
  2. Сортировка списка по индексам
  3. Избегайте пустого списка
  4. Приоритет операций в Python
  5. Экспорт данных в файл.
  6. Создание обратного итератора
  7. JMESPath в Python
  8. Функция format() в Python
  9. Декоратор @override
  10. Делегирование в Python
  11. Присоединение элементов коллекции
  12. Перегрузка операторов в Python
  13. Оптимизация памяти с slots
  14. Группировка элементов Python
  15. Псевдонимы в Python
  16. Defaultdict в Python
  17. Измерение потребления памяти при сортировке
  18. Хранение переменных в Python.
  19. JSON-esque в Python
  20. Работа с файлами в Python
  21. Преобразование Word в PDF с Spire.Doc
  22. Использование двоеточия в Python
  23. Функции-генераторы в Python
  24. Принципы Zen Python
  25. Поиск самого частого элемента
  26. Переменная Шредингера
  27. Срез списка в Python
  28. Отделение звука от видео
  29. Создание вложенного генератора
  30. Асинхронное выполнение задач в Python
  31. Нахождение разницы между списками в Python
  32. Сортировка и разворот списка
  33. Поиск самого длинного слова в списке с использованием max()
  34. Итераторы в Python
  35. Статическая типизация в Python
  36. Удаление элемента по индексу
  37. Считывание бинарного файла в Python
  38. Метод pop() списка
  39. Просмотр атрибутов и методов класса
  40. Роль запятой в Python
  41. Извлечение аудио из видео
  42. PEP-401: оператор
  43. Структуры данных в Python
  44. HTTP-запросы с библиотекой Requests
  45. Преобразование данных в Python
  46. Вычисление разности множеств в Python
  47. Библиотека Chartify: руководство

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