Курс 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. Функция zip() — объединение последовательностей
  3. Принципы Zen Python
  4. Объединение списков в строку
  5. Транспонирование матрицы в Python
  6. Переворот списка в Python
  7. Лямбда-функции для min/max
  8. Ввод нескольких значений
  9. Удаление файлов с shutil.os.remove()
  10. Операторы Splat и splatty-splat
  11. Обход элементов в Python
  12. Введение в Python
  13. Команда %dhist — список посещенных каталогов
  14. Блок else в циклах Python
  15. Итераторы в Python
  16. Сравнение строк в Python
  17. Создание файла с проверкой ошибки
  18. Инвертирование словаря
  19. Вакансии в Nebius
  20. Обработка ошибок в Python
  21. Поиск индексов в списке
  22. Распаковка элементов последовательности
  23. Сортировка данных в Python
  24. Отправка поздравлений по дню рождения
  25. Оценка выражений генератора в Python
  26. Работа с NumPy
  27. Возведение в квадрат с помощью itertools
  28. Управление контекстом с помощью декоратора contextmanager
  29. JMESPath в Python
  30. Тип CodeType в Python.
  31. Генератор надежных паролей
  32. Работа с кортежами в Python
  33. Отправка POST-запроса в REST API
  34. Частичное совпадение ввода
  35. Работа с defaultdictами в Python
  36. Проверка условий в Python
  37. Печать в одной строке
  38. Работа с Telegram API на Python
  39. Подписка на каналы разработчиков
  40. Python и Монти Пайтон
  41. Progress с библиотекой tqdm
  42. Удаление эмодзи с помощью pandas
  43. Имена объектов в Python
  44. Проверка на палиндром
  45. Обучение модели с указанием эпох
  46. Основы Python за 14 дней

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