Запланируйте повторяющееся событие в Python 3

Я пытаюсь запланировать повторяющееся событие для выполнения каждую минуту в Python 3.

Я видел класс sched.scheduler но я задаюсь вопросом, существует ли другой способ сделать это. Я услышал упоминания, я мог использовать несколько потоков для этого, которое я не буду возражать делать.

Я в основном запрашиваю некоторый JSON и затем анализирую его; его значение изменяется со временем.

Использовать sched.scheduler Я должен создать цикл, чтобы запросить это запланировать даже для выполнения в течение одного часа:

scheduler = sched.scheduler(time.time, time.sleep)

# Schedule the event. THIS IS UGLY!
for i in range(60):
    scheduler.enter(3600 * i, 1, query_rate_limit, ())

scheduler.run()

Что другие способы сделать это там?

29
задан Humphrey Bogart 8 March 2010 в 00:35
поделиться

1 ответ

Вы можете использовать threading.Timer , но он также планирует разовое событие, аналогично методу .enter для объектов планировщика.

Обычный шаблон (на любом языке) для преобразования одноразового планировщика в периодический планировщик - это перенастройка каждого события через указанный интервал. Например, с sched я бы не использовал цикл, как вы, а скорее что-то вроде:

def periodic(scheduler, interval, action, actionargs=()):
    scheduler.enter(interval, 1, periodic,
                    (scheduler, interval, action, actionargs))
    action(*actionargs)

и инициировал бы весь «вечный периодический график» с помощью вызова

periodic(scheduler, 3600, query_rate_limit)

Или, я можно использовать threading.Timer вместо scheduler.enter , но шаблон очень похож.

Если вам нужно более тонкое изменение (например, прекратить периодическое изменение расписания в заданное время или при определенных условиях), это не так уж сложно согласовать с несколькими дополнительными параметрами.

41
ответ дан 28 November 2019 в 00:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: