Я пытаюсь запланировать повторяющееся событие для выполнения каждую минуту в 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()
Что другие способы сделать это там?
Вы можете использовать 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
, но шаблон очень похож.
Если вам нужно более тонкое изменение (например, прекратить периодическое изменение расписания в заданное время или при определенных условиях), это не так уж сложно согласовать с несколькими дополнительными параметрами.