Эффективный способ ожидания в Python без использования input ()? - PullRequest
0 голосов
/ 04 января 2019

У меня есть скрипт на python, в котором я использую прослушиватель из другой библиотеки, чтобы ждать и прослушивать событие (которое затем обрабатывает мой скрипт).В процессе разработки я использовал оператор input () (внутри цикла True) в конце моего сценария, чтобы эффективно поддерживать сценарий в активном состоянии, ничего не делая (кроме ожидания события).Однако теперь, когда я поместил это в службу systemd, input () завершается с ошибкой EOF, поскольку системные службы не должны иметь консольного ввода-вывода.Что такое «хороший» или питонический способ добиться здесь бесконечной петли?Я мог бы сделать while True: pass или while True: sleep(0.1), но первый сжигает процессор, а второй кажется хакерским.

1 Ответ

0 голосов
/ 04 января 2019

Посмотрите на официальный документ о сопрограммах .

Пример:

import time, asyncio

async def run_task():
    for i in range(5):
        print('running task %d' % i)
        await awaiting_task(i)

async def awaiting_task(name):
    time.sleep(5) # wait for 5 seconds
    print('task %s finished' % str(name))

asyncio.run(run_task())

Синтаксис async превратит функцию в сопрограмму, которая сохраняетесли возможно, ваш процессор, кроме занятого ожидания.

...