TL; DR – я построил приложение Python Event, используемое публично доступное в реальном времени потока обновлений данных COVID-19 с использованием Broker Pubsub Pubsub + в качестве инфраструктуры обмена сообщениями. Проверьте исходный код в этом репо Github под Образцы/Питон
Solacelabs/Covid19-поток-процессоры
Поток информации и пример приложений для обработки JHU и COVIDTRACKING.COM COVID-19 DATA, доступные в виде потоков над утешением
Фу! Теперь, когда TL; доктор слон в комнате уходит с дороги, давайте доберемся до ядра 🐘
Прямо сейчас с ситуацией, когда мир в настоящее время находится, некоторые из нас, вероятно, думают «Хм, что я могу сделать, чтобы вернуться в общество? Если я не могу напрямую вносить что-то, что я могу научиться во время карантина, чтобы полировать мои навыки и в то же время построить что-то полезное? «Я не знаю о вас, но я определенно усилил свои навыки выпечки с количеством банановых хлебов, которые я испеченных (и ел). Помимо выпечки, я взял эту ситуацию как возможность узнать новые технологии и иметь что-то относительно реализовать его на (I.e. Covid). Я выбрал Python в качестве языка программирования, чтобы узнать и дополнить все то, что я знаю в архитектурах, ориентированных на события.
В предыдущем сообщении в блоге я обсудил, как я построил приложение Nodejs, управляемое событиями в реальном времени потоков данных COVID-19. Я также охватил какой-то опыт на том, что такое, ориентированное на события, почему это важно и как использовать шаблон обмена сообщениями публикации/подписки для подхода к приложению здания и приложения EDA, поэтому я рекомендую прочитать его, если вы еще не 🤗. Если JavaScript/Nodejs не ваша чашка чая, то беспокойтесь не! В этом blogpost я буду делиться тем, как я использовал Python 🐍 для создания простого приложения для ведения событий, используя те же потоки данных COVID-19 с теми же тремя основными требованиями.
Прежде чем создать любое приложение и работать над проектом, я начну с разработкой моего дизайна архитектуры, разные инструменты для использования и языка программирования, мне нужно успешно получить MVP вверх и бежать. С таким подходом я буду использовать следующий технический стек:
- Язык программирования : Питон
- Протокол обмена сообщениями : MQTT
- Сообщение брокера : Polece Pubsub +
- Источник данных : Данные COVID-19, предоставленные приложением издателя согласно Эта документация Отказ
Обратите внимание, что в моем технологическом стеке я не перечислял никаких API для отдыха или архитектуры клиента/сервера 🤝. Следующий!
Чтобы настроить мою среду Python, я буду использовать VirtualenV. В двух словах Virtualenv – это инструмент, используемый для изоляции среды Python, создавая структуру каталогов, инкапсулирующую все установленные пакеты, которые вам нужны в приложении, которое вы строите. Таким образом, вы не будете загрязнять ваши глобальные пакеты Python с чем-либо, требующим вашим приложением. Вы можете прочитать больше об этом здесь А по тому, почему это рекомендуемый подход для развития Python.
Примечание. Если вы пришли с фона Nodejs, подумайте с точки зрения Node_Modules.
В новом терминале выполните следующую команду, чтобы создать новый каталог для вашего проекта, настроить виртуальную среду Python и активировать ее:
mkdir covid_python && cd "$_" && virtualenv env && source env/bin/activate
Теперь установите Paho-MQTT Пакет Python:
pip install paho_mqtt
Создать новый COVID.PY
Файл и инициализируйте его со следующим:
import paho.mqtt.client as mqtt # Solace Broker Info url = "mr2r9za6fwi0wf.messaging.solace.cloud" username = "covid-public-client" password = "covid19" def on_connect(client, data, flags, rc): assert (rc == 0), "Error Connecting. Return code: " + str(rc) print("Connected to the COVID PubSub+ Solace Broker!") client = mqtt.Client() client.username_pw_set(username=username, password=password) client.on_connect = on_connect client.connect(url) client.loop_forever()
То, что вы сделали выше, импортирует Paho-MQTT
Пакет и инициализировал клиент MQTT с использованием параметров конфигурации.
Важно отметить следующее:
client.loop_forever ()
Является ли функция блокировки, которая обрабатывает сетевой трафик, отправленные обратные вызовы и обрабатывает переподключение. Вы можете прочитать больше о других функциях Loop * () в главной Страница документации Отказ.on_connect
Является ли функция, вызванная, когда брокер отвечает на наш запрос на связи. Мы назначаем этот обратный вызов дляon_connect (клиент, userdata, флаги, RC)
Функция, которая будет выполняться при успешной связи.
Теперь у вас есть выходной скелет, чтобы проверить нашу связь. От вашего терминала выполнить следующее
python covid.py
Вы должны увидеть Подключен к COVID Pubsub + Broker Broker!
на вашем терминале. Количество! Соединение установлено 🎉. Чтобы остановить выполнение программы, нажмите CMD + C
(или Ctrl + C
Если вы плаваете в домене Windows).
3. Обрабатывать события
Для обработки входящих сообщений от Pubsub + Broker в действие в основе событий, мы должны сначала подписаться на интересующую тему (в соответствии с «Доступными темами ) и обрабатывать сообщения со вторым типом функции обратного вызова: .on_message Отказ
import paho.mqtt.client as mqtt def on_connect(client, data, flags, rc): assert (rc == 0), "Error Connecting. Return code: " + str(rc) print("Connected to the COVID PubSub+ Solace Broker!") for t in topics: print("Subscribing to: " + t) client.subscribe(t) def on_message(client, data, msg): print("Received message on: %s\n %s" % (msg.topic, msg.payload.decode('ascii'))) # Broker Info url = "mr2r9za6fwi0wf.messaging.solace.cloud" username = "covid-public-client" password = "covid19" topics = [ "jhu/csse/covid19/test/cases/+/update/Canada/Ontario/#", "com/covidtracking/states/current/update/New York", ] client = mqtt.Client() client.username_pw_set(username=username, password=password) client.on_connect = on_connect client.on_message = on_message client.connect(url) client.loop_forever()
В приведенной выше программе кода:
- Я добавил
on_message (клиент, данные, MSG)
Функция для обработки.on_message.
Обратный вызов от клиента. Обратите внимание на декодирование полученной полезной нагрузки в ASCII, поскольку мы получаем полезную нагрузку в двоичном формате. - Есть подписки на два разных тем
- Все случаи обновления в Онтарио, Канада, полученные из источника данных Университета Джона Хопкинса. Я использовал тестовый поток.
- Все случаи обновлений в Нью-Йорке, полученные из источника данных проекта COVID Tracking. Примечание. Вы можете использовать тему
COM/COVIDTRACKING/ШОС/Текущий/Получить/RAW
получить необработанные обновления от всех штатов в Соединенных Штатах
Запустите код и дождитесь появления обновлений!
Примечание на JSON
Поскольку возвращенный формат полезной нагрузки сообщения находится в JSON, вы можете использовать пакет Python JSON для обработки, манипулирования и Украсить Ваш выход. Вот полный код для вашего приложения
import paho.mqtt.client as mqtt import json def on_connect(client, data, flags, rc): assert (rc == 0), "Error Connecting. Return code: " + str(rc) print("Connected to the COVID PubSub+ Solace Broker!") for t in topics: print("Subscribing to: " + t) client.subscribe(t) def on_message(client, data, msg): msg_json_object = json.loads(msg.payload.decode('ascii')) msg_json_pretty = json.dumps(msg_json_object, indent=2) print("Received message on: %s\n %s" % (msg.topic, msg_json_pretty)) # Broker Info url = "mr2r9za6fwi0wf.messaging.solace.cloud" username = "covid-public-client" password = "covid19" topics = [ "jhu/csse/covid19/test/cases/+/update/Canada/Ontario/#", "com/covidtracking/states/current/update/New York", ] client = mqtt.Client() client.username_pw_set(username=username, password=password) client.on_connect = on_connect client.on_message = on_message client.connect(url) client.loop_forever()
Я хотел бы исследовать больше внешних каркасов, которые я могу использовать в сочетании с Python. Таким образом, в идеале у меня будет общаться с Python Application Comment с Broker Solace Pubsub + Broker в качестве Backend Piece Application Infrastructure и прохладной передней панелью, чтобы представить ее. Эй, что случилось Джанго?
Так вот реальный вопрос, что вы узнали во время карантина? Поделитесь в комментариях ниже и давайте начнем обсуждение!
О, и если у вас есть какие-либо рекомендации для фреймворков передней части, я бы хотел 👀, что у вас есть и 👂 ваши предложения.
И закончить хорошую ноту, я бы хотел оставить вас с одним из моих любимых GIFS
Оригинал: “https://dev.to/solacedevs/how-i-used-covid-tracking-data-to-build-and-learn-a-python-event-driven-application-1l44”