Мы разрабатываем несколько небольших сервисов для работы как демон unix.Сохранение демона python живым
Наша первая реализация была зависеть от скрученного реактора. Экземпляр реактора был нашим артефактом, чтобы поддерживать работоспособность ОС и работать без остановки после вызова подпроцесса.
В последнее время мы удалили Twisted зависимости для этих модулей, оставаясь при этом необходимостью продолжать работу процессов после вызова subprocess
. Мы положили оператор 'while True: time.sleep(.1)
' в конце нашего метода «main()», и он отлично работает.
С вызовом time.sleep(.1)
наша производительность растрачивает производительность, учитывая события пробуждения ~ 600 раз в минуту. Это не очень хорошо для производительности нашего приложения. Если заменить
while True:
time.sleep(.1)
по
while True:
pass
потребляет так много процессорного времени (~ 1,7% от i5, постоянно).
Есть лучшие или сбалансированные альтернативные решения с меньшим удельным весом процессора и с гибкой производительностью для следующих параметров?
reactor.run()
и
while True:
time.sleep(.1)
Я нашел некоторые подобные ответы и обсуждения на StackOverflow и Интернете, но did'n найти четкое обсуждение он рассматривает питона.
Я бы подумал, что функция сна фактически не теряет работоспособности. Сон заставляет процесс приостанавливаться, так что CPU может идти и делать другие вещи за это время. Если там, однако, нечего делать, кроме как выполнить ваше приложение, в любом случае нет такой вещи, как «отходы». – Jocke
Сон сам по себе не делает, но называть его 600 раз в минуту только способствует тепловой смерти Вселенной. – Tritium21
Наше приложение получает некоторые точечные сообщения на основе системных событий. Иногда он может получать поток сообщений. Если я пробуждаю процесс всего 600 раз в минуту, некоторые сообщения будут задерживаться и накапливаться для следующего события пробуждения. Я думаю, что время процессора может быть более эффективным, чем 600 раз в минуту, и дает больше времени для демона, чем мы вынуждаем вызовы функций высокого уровня (time.sleep) для управления им. Это одна из моих целей – apast