Курс 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. Модуль subprocess: запуск внешних команд
  4. Python: Фильтрация списков с помощью filter()
  5. Генерация ключей RSA
  6. Модуль xkcd: добавление юмора в Python
  7. Списки в Python: синтаксис представления
  8. Генерация случайных чисел в Python
  9. Numpy: разбиение массивов
  10. Big O оптимизация
  11. Поиск с библиотекой Google
  12. Делегирование в Python
  13. Оценка выражений генератора в Python
  14. Генерация фальшивых данных с Faker
  15. UserList в Python: Описание и примеры использования
  16. Условные выражения в Python
  17. Конкатенация строк с методом join()
  18. Получение пути к текущему скрипту с помощью os
  19. Списки в Python: основы
  20. Генераторы в Python
  21. Создание матрицы в Python
  22. Инициализация объекта
  23. Поиск самого частого элемента
  24. Работа с кортежами в Python
  25. Функции map, filter, reduce
  26. Работа с URL-адресами в Python
  27. Удаление и повторная вставка ключа в OrderedDict
  28. Создание списков в Python
  29. Вычисление логарифмов в Python
  30. Основные методы NumPy
  31. Удаление URL-адресов в Python
  32. Пропуск начальных строк с помощью dropwhile()
  33. Переворот строки
  34. Создание класса в Python
  35. Возврат нескольких значений
  36. Работа с итераторами в Python
  37. Приближение чисел в Python
  38. Обход дочерних элементов BeautifulSoup
  39. Обрезка изображения с Pillow
  40. Преобразование регистра символов
  41. Удаление дубликатов из списка с помощью dict.fromkeys
  42. Подсчет часто встречающихся элементов
  43. Оператор @ для умножения матриц
  44. Делегирование в Python
  45. Преобразование символов в нижний регистр
  46. F-строки в Python
  47. Оценка точности модели

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