Быстрый совет по науке о данных № 002: Запуск Cronjob из API Flask!

Эй, ребята! Вернемся к этому снова с еще одним быстрым советом для всех вас. Я получил много очень добрых и положительных отзывов о последнем посте, поэтому я рад снова вернуться к нему на этой неделе!

Сегодня мы поговорим о том, как запустить cronjob из Flask API. Теперь, если вы не знакомы с Flask и его значением для машинного обучения, я бы посоветовал вам ознакомиться с любым из множества фантастических постов, которые более подробно освещают эту тему. На самом деле, позвольте мне облегчить вам задачу и просто предложить вот этот. На Medium есть бесконечный источник отличных статей, таких как ссылка выше.

Какими бы полезными ни были эти статьи, моя цель в этих постах — надеюсь, научить вас чему-то, чего вы, возможно, не увидите больше нигде. Таким образом, хотя существует миллион статей о полезности Flask для развертывания машинного обучения, лично я не видел ни одной, в которой говорилось бы о том, как запустить базовое задание cron непосредственно из API Flask. Как только вы увидите, как это сделать, вы увидите, насколько просто и быстро это реализовать. Прежде чем мы перейдем к тому, как это сделать, давайте кратко рассмотрим, почему кто-то может захотеть это сделать.

Зачем кому-то запускать cronjob из Flask API?

Я надеюсь, что само собой разумеется, что если я пишу пост о том, как что-то сделать, это означает, что у меня была причина, чтобы понять это для себя в первую очередь! В моем сценарии я расширил данные, поступающие в API, с дополнительными данными, загруженными в память в виде Pandas DataFrame. Эти дополнительные данные поступали в виде статического CSV-файла, который находился в месте, доступном моему Flask API, и обновлялся два раза в неделю с помощью внешних процессов. Чтобы убедиться, что расширенные данные обновляются надлежащим образом, мне понадобилось средство для запуска простого задания cron, не нарушающего основные функции API Flask.

В начале своего пути я обдумывал несколько идей. Сначала я задавался вопросом, не придется ли мне просто свернуть все развертывание Flask API и повторно загружать его каждый раз, когда обновляются улучшающие данные, но это явно не было оптимальным выбором. Другая идея состояла в том, чтобы создать отдельное развертывание только для обновления улучшающих данных и сделать так, чтобы мой Flask API каким-то образом ссылался на это, но это также казалось излишне сложным.

К счастью, я обнаружил то, чем собираюсь поделиться с вами, и это не только помогло мне, но и очень просто реализовать!

Как запустить простой cronjob из Flask API?

Итак, теперь, когда мы рассмотрели почему, давайте обратим внимание на как. Возможно, одна из причин, по которой я так сильно люблю Python, заключается в том, что существует так много полезных библиотек, которые просто созрели для выбора. В нашем случае мы будем использовать библиотеку APScheduler. APScheduler на самом деле имеет гораздо больше функциональных возможностей, чем то, что мы собираемся использовать, но мы собираемся сосредоточиться именно на BackgroundScheduler.

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

Как звучит название, BackgroundScheduler запускает очень маленький поток за кулисами специально для запуска cronjob. После правильной установки библиотеки, импортируйте ее в свой скрипт Flask так же просто, как это.

Хотите верьте, хотите нет, но мы уже на трети пути к завершению. Теперь, когда мы импортировали BackgroundScheduler, нам нужно создать его экземпляр как объект, а затем выполнить команду для его правильного запуска. Как показано на скриншоте ниже, сделать это очень просто. В моем случае мы назовем этот экземпляр BackgroundScheduler как «sched».

Две трети позади, осталось еще одна. Что мне нравится в APScheduler, так это его способность просто добавлять декоратор к функции, чтобы он мог применить к ней функциональность cron. На скриншоте ниже я добавляю декоратор cronjob, который будет запускаться каждую минуту. Как только секундная стрелка достигает 12, очень простое Hello world! сообщение будет напечатано непосредственно на консоли. Очевидно, это очень простой случай, поэтому, если вы хотите увидеть все варианты того, что вы можете изменить в декораторе cron, ознакомьтесь с этой документацией здесь.

Разве ты не знаешь, что мы уже закончили! Когда я иду и запускаю свой Flask API, «Hello world!» распечатывается непосредственно на консоль каждую минуту, как показано на скриншоте ниже.

Очень просто! Cronjob запускается, когда это необходимо, в то время как основные функции Flask API остаются нетронутыми.

И это все для этого поста! Если вы хотите углубиться в мой код, обязательно ознакомьтесь с моим репозиторием GitHub. Он содержит точные инструкции о том, как правильно установить библиотеки, которые вам понадобятся, а также о том, как правильно вызвать там мой небольшой скрипт Python. Надеюсь, этот быстрый совет был вам полезен! Если есть что-то еще, что вас интересует, поделитесь со мной своими идеями, так как они могут оказаться в будущем посте. Еще раз спасибо за чтение!