Курс 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. Замена текста с помощью sub
  2. Замыкания в Python
  3. Метод rlshift для битового сдвига
  4. Сортировка HTML-элементов
  5. Функция enumerate() — Python
  6. Перезагрузка оператора в Python
  7. Порядок и длина множеств в Python
  8. Метод init в Python
  9. Объединение строк с помощью метода join
  10. Замена элементов в списке с помощью генераторов списков
  11. Разбиение текста в Python
  12. Метод get для словаря
  13. Оптимизация параметров в Python
  14. Метод __ixor__ для побитового исключающего ИЛИ
  15. Разделение строки с помощью split()
  16. Работа с collections в Python
  17. Python Enum Weekday Usage
  18. Управление контекстом с помощью декоратора contextmanager
  19. Определение имен функций
  20. Преобразование в float
  21. Преобразование Excel в PDF с Spire.XLS
  22. Python 3.12: Псевдонимы типов
  23. Метод join() для объединения элементов
  24. Проверка условий: all и any
  25. Измерение потребления памяти при сортировке
  26. Pretty-printing JSON в Python
  27. Присвоение и ссылки
  28. Работа с утверждениями в Python
  29. Печать календаря
  30. Присвоение значений переменным в Python
  31. Функция sleep() в Python
  32. Создание виртуальной среды
  33. Обход дочерних элементов BeautifulSoup
  34. Хранение переменных в Python.
  35. Работа с deque из collections
  36. Проверка версии Python
  37. F-строки в Python 3.8
  38. Преобразование символов в нижний регистр
  39. Функция zip() для объединения списков
  40. Работа с Colorama
  41. List Comprehension Tutorial
  42. Профилирование кода
  43. Оператор объединения словарей
  44. Конвертация коллекций в Python.
  45. Показ всплывающих окон Tkinter
  46. Доступ к локальным переменным
  47. Хранение переменных в словаре.
  48. Избегание изменяемых аргументов

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