Курс 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. Оптимизация создания строк
  2. Получение списка кортежей из словаря
  3. Метод Self в Python
  4. Перетасовка списков в Python
  5. Создание функций с произвольным количеством аргументов
  6. Обработка данных в Python
  7. Многострочные комментарии в Python
  8. kwargs в Python
  9. Python Поверхностное Копирование
  10. Принципы LSP и ISP в Python
  11. Работа с CSV файлами
  12. Создание новых списков в Python
  13. Оператор is в Python
  14. Генерация QR-кодов с Python
  15. Заказ карты Тинькофф Black
  16. Создание вложенного генератора
  17. Вычисление разности множеств в Python
  18. Вставка переменных в шаблоны Flask
  19. Подписка на каналы разработчиков
  20. Применение функции к каждому элементу списка
  21. Профилирование кода
  22. Отладчик pdb: начало работы
  23. Списки: объединение, изменение
  24. Импорт в Python: список all
  25. Создание комплексных чисел
  26. Выражения-генераторы в Python
  27. Создание коллекций из генератора
  28. Метод get() для словарей
  29. Функции any() и all() в Python
  30. Мониторинг памяти с Pympler
  31. Парсинг веб-страниц с Beautiful Soup
  32. Параллельные вычисления в Python
  33. Списки в Python: синтаксис представления
  34. Модуль Antigravity в Python 3
  35. Отделение звука от видео
  36. Генераторы в Python
  37. Фильтрация входных данных в Python
  38. Метод rpow в Python
  39. CLI-инструмент howdoi
  40. Структуры данных в Python
  41. Открытие и запись файлов
  42. Оператор assert в Python
  43. Метод rsub для пользовательских чисел
  44. Создание веб-приложения с Flask
  45. Возвращение нескольких значений через кортеж или класс

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