Курс 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. Удаление ключей из словаря
  4. Удаление пробелов методом translate()
  5. Генераторы списков в Python
  6. Управление импортом в Python
  7. Работа с CSV файлами в Python
  8. Фильтрация входных данных в Python
  9. Комплексные числа в Python
  10. Вывод символов строки в Python
  11. Получение локальных переменных в Python
  12. Модуль pprint
  13. Удаление файлов в Python
  14. Копирование файлов с shutil()
  15. Обновление данных через PUT запрос
  16. Объединение кортежей в Python
  17. Измерение времени выполнения кода с использованием time
  18. Обратный список чисел
  19. Закрытие файла в Python
  20. Особенности ключей словаря в Python
  21. Извлечение аудио из видео
  22. Сериализация и десериализация объектов
  23. Оператор walrus в Python
  24. Разделение строки на пары ключ-значение.
  25. Обновление множества в Python
  26. Установка максимального количества цифр
  27. Метод rrshift для пользовательских объектов
  28. Сохранение и загрузка модели в PyTorch
  29. Лямбда-функции в цикле
  30. Генераторы данных
  31. Документирование функций в Python
  32. Измерение времени выполнения в Python
  33. Работа с f-строками 2.0
  34. Удаление символа из строки
  35. Работа со случайными элементами
  36. Объединение словарей в Python
  37. Именование переменных в Python
  38. JSON в Python: модуль, dump, dumps, load
  39. Атрибуты объекта в Python
  40. Возвращение нескольких значений
  41. Обработка исключений в Python 3
  42. Вывод с переменной через запятую
  43. Ошибка NotImplemented в Python
  44. Объявление переменных в Python
  45. Бесконечные списки в Python
  46. Генерация UUID в Python
  47. Установка и использование emoji
  48. Список переменных в Python

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