Приведу пример самого простого планирования на python не требующего усложнений.
Альтернативы такому подходу — cron или периодические задачи (celery).
В примере ниже когда запустится наше приложение одновременно запустится функция start_updating. После её завершения она вновь будет запланирована на указанное время.
Сначала приведу пример, затем разберем плюсы и минусы такого подхода.
Пример
В файле __init__.py:
start_updating()
В файле функции:
print('Запускаются обновления')
now = datetime.now()
hour = now.hour
if is_market_close() or is_weekend():
print('Рынок закрыт. Обновление данных приостановлено.')
Timer(61, start_updating).start()
return
# Сохраним баланс счета
if hour > 0 or hour <= 1:
asyncio.run(update_deposit())
asyncio.run(update_portfolio())
asyncio.run(update_markets())
if hour <= 16:
for ticker in tickers:
asyncio.run(update_market_volume())
# Обновить последние операции
asyncio.run(update_operations())
# Повтор обновления
Timer(61, start_updating).start()
Плюсы и минусы
Плюсы
— Простота и легкость реализации. Никаких дополнительных зависимостей.
— В отличии от cron или периодических задача (celery) функция повторно не запустится пока не завершится.
Минусы
— Нет гибкости в настройке времени.
— Становится не так удобно, если планирований много.
— А еще он может блокировать синхронные процессы на wsgi-сервере и останавливаться с ошибками, когда к базе данных одновременно посылаются запросы при инициализации приложения (в этом случае осуществляется запуск этой функции и выполнение всех задач в ней) и загрузи страницы сайта требующего также доступа к бд.