Правильная работа asyncio sleep

у меня стоит задача, оповещать каждую минуту, информацию об аукционе, есть такой код, но не уверен что это нормальная реализация, можно как-нибудь получать сколько осталось задержки в функции или как-то профитнее это сделать? Текущая реализация:

import asyncio

async def draw_info(auction):
   print("до окончания 5 минут")
   await asyncio.sleep(60)
   print("до окончания 4 минуы")
   await asyncio.sleep(60)
   print("до окончания 3 минуы")
   await asyncio.sleep(60)
   print("до окончания 2 минуы")
   await asyncio.sleep(60)
   print("до окончания 1 минута")
   await asyncio.sleep(60)

asyncio.ensure_future(draw_info())

Ответы (1 шт):

Автор решения: eri

https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.loop.call_at - планировщик задач

import asyncio

def draw_info(timestamp):
    loop = asyncio.get_event_loop()
    for i in range(1, 5):
        loop.call_at(
            timestamp-i*60, # время, после которого выполнится
            print, # обычная функция
            "до окончания {i} минут".format(i=i) # аргументы (*args) для функции
        )

timestamp = time.time() + 310

draw_info(timestamp)

# тут можно запланировать другие задачи, запустить сервисы и прочее

asyncio.get_event_loop().run_forever()

Погрешность не накапливается в отличие от sleep и зависит только от времени выполнения асинхронной функции из остального кода.

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

→ Ссылка