Курс 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. Использование функции enumerate()
  2. capitalize() — изменение регистра первого символа строки
  3. Срезы в Numpy
  4. Избегание изменяемых аргументов
  5. Функции any() и all() в Python
  6. Метод __ilshift__ для битового сдвига влево
  7. Метод __getitem__ в Python
  8. Отображение HTML кода в Python
  9. Проверка существования переменной с оператором :=
  10. Сортировка данных с лямбда-функциями
  11. Объединение списков с помощью zip
  12. Метод title() в Python
  13. Функция __init__ в Python
  14. Установка random seed в Python
  15. Метод append() для списка
  16. Работа с deque из collections
  17. Печать месячного календаря
  18. Python Calendar Usage
  19. Python 3.12: Псевдонимы типов
  20. Форматирование чисел в Python
  21. Работа с очередями в Python
  22. Модуль functools в Python
  23. Присвоение и ссылки
  24. Управление IP-адресами через прокси
  25. Получение текущего времени в Python
  26. Работа с контекстными менеджерами
  27. Локальные переменные.
  28. Pretty-printing JSON в Python
  29. Объявление переменных в Python
  30. Установка User-Agent в Python
  31. Удаление символов новой строки в Python.
  32. Lambda Functions in Python
  33. Возврат значений из генератора
  34. Синхронизация доступа к ресурсам
  35. Метод get() для словарей
  36. Работа с кортежами в Python
  37. Работа с комплексными числами
  38. Подсчет частоты элементов с Counter
  39. Обход дочерних элементов BeautifulSoup
  40. Генерация случайных чисел в Python
  41. Работа с Requests для HTTP-запросов
  42. Обрезка изображения с Pillow
  43. Создание класса в Python
  44. Константы в модуле cmath
  45. Оператор walrus в Python
  46. Python: библиотеки и функции
  47. Разработка Telegram-ботов

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