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"