Курс 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. Разделение строк методом split()
  2. Функция count() в Python
  3. Управление виртуальными окружениями в Python
  4. Поиск индекса элемента
  5. Модуль inspect: получение информации о объектах
  6. Работа с изображениями Pillow
  7. Изменение элемента списка
  8. Работа с WindowsPath()
  9. Получение списка кортежей из словаря
  10. Библиотека funcy: удобные утилиты
  11. Форматирование данных с помощью pprint
  12. Участие в сообществе @selectel
  13. Игра «Камень, ножницы, бумага» — Python
  14. Создание уникального проекта
  15. Применение функции к списку
  16. Атрибуты класса и экземпляра
  17. Фильтрация последовательности
  18. Анализ кода — Python
  19. Использование модуля math
  20. Равенство и идентичность в Python
  21. Создание генераторов в Python
  22. Создание графики с черепахой
  23. Работа с байтовыми строками в Python
  24. Поиск самого длинного слова в списке с использованием max()
  25. Работа с очередями в Python
  26. Копирование списков в Python
  27. Работа с defaultdictами в Python
  28. Метод rlshift для битового сдвига
  29. Структуры данных в Python
  30. Импорт модулей в Python 3.12
  31. Приближение чисел в Python
  32. Цикл for в Python
  33. Установка User-Agent в Python
  34. Установка и использование pyshorteners
  35. Генераторы в Python
  36. Получение текущего времени в Python
  37. Удаление элементов из списка
  38. Создание списка через итерацию
  39. Преобразование кортежа в словарь.
  40. Метод join() для объединения элементов
  41. Создание словарей и множеств в Python
  42. Оператор is в Python
  43. Декораторы в Python
  44. Удаление пробелов методом translate()
  45. Импортирование в Python
  46. Логирование с Logzero
  47. Переопределение метода xor в Python

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