Python — планирование задач через timer

Admin Python

Приведу пример самого простого планирования на python не требующего усложнений.

Альтернативы такому подходу — cron или периодические задачи (celery).

В примере ниже когда запустится наше приложение одновременно запустится функция start_updating. После её завершения она вновь будет запланирована на указанное время.

Сначала приведу пример, затем разберем плюсы и минусы такого подхода.

Пример

В файле __init__.py:

from app.updates.updates import start_updating
start_updating()

В файле функции:

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

Кстати, на сайте нет рекламы. У сайта нет цели самоокупаться, но если вам пригодилась информация можете задонатить мне на чашечку кофе в макдаке. Лайкнуть страницу или просто поблагодарить. Карма вам зачтется.

Добавить комментарий

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи:
"Python — планирование задач через timer"