У меня есть цикл Python, который должен запускаться каждую минуту, выполнять некоторую обработку данных и спать до следующей минуты. Однако обработка занимает переменное количество времени, иногда она близка к нулю, когда делать нечего, иногда это занимает даже 10 или 20 секунд.
Чтобы компенсировать это, я измеряю время, необходимое для запуска обработки, следующим образом:
while True:
time_start = time.time()
do_something() # <-- This takes unknown time
time_spent = time.time() - time_start
time.sleep(60 - time_spent)
Это работает, но через пару дней все еще уходит на несколькосекунд. Я предполагаю, что это происходит, когда компьютер (маленький Raspberry Pi) занят и задерживает начало цикла, а затем все начинает ускользать.
Мне не нужно do_something()
исполнено точно каждую минуту, поэтому нет необходимости в ОС реального времени или чем-то подобном, но я не хочу, чтобы один отложенный запуск влиял на все последующие.
Есть ли какой-то планировщик, который может запускать мою функциюпо заранее установленному тарифу? Или какой-нибудь более умный способ компенсировать случайные задержки?