2016-12-21 33 views
1

Я программирование noob для web и mqtt, я работаю над приложением python, которое использует mqtt (через hivemq или rabbitmq broker), а также нужно реализовать http rest api для клиентов.Использование http и mqtt вместе в однопоточном приложении python

Я понял, что с использованием рамки для python-бутылок довольно просто обеспечить простой HTTP-сервер, однако как флакон, так и mqtt имеют свой цикл событий, как мне объединить эти два цикла событий, я хочу иметь однопоточное приложение, чтобы избежать сложности ,

+0

Возможно, вы этого не сделаете. Что именно вы пытаетесь достичь, нам нужно больше деталей – hardillb

+0

, чтобы предоставить вам более подробную информацию, клиенты подключаются к этой услуге через http/rest, однако эта служба взаимодействует со многими другими службами на back-end через mqtt. поэтому эта служба должна запускать цикл mqtt (используя paho python client) и предоставлять HTTP-запросы, в которых она использует бутылку, и, следовательно, она должна запускать цикл запуска бутылки. это можно сделать в 2 разных потоках, мой вопрос в том, что есть способ объединить их в 1 поток? Вы полагаете, что использование 2 потоков - это лучший/единственный выход? – user424060

+0

Я имел в виду, что такое взаимодействие MQTT, это запрос/ответ? – hardillb

ответ

1

Я не знаком с бутылкой, но быстро посмотрю на документы, это не похоже на то, что есть какой-либо другой способ запустить его цикл событий, кроме функции run().

Paho предоставляет loop_start(), который будет запускать собственный поток фона для запуска цикла событий сети MQTT.

Учитывая то похоже, не будет никакого способа, чтобы запустить цикл бутылки вручную, я хотел бы предложить вызова loop_start() перед тем run() и позволить приложения работать на 2 отдельных нитей, так как не существует способа, чтобы объединить их, и вы, вероятно, не хотели бы, чтобы в любом случае ,

Единственное, о чем нужно быть осторожным, будет, если подписчики MQTT будут обновлять данные, отправляемые службой REST, но до тех пор, пока не потоки больших объемов данных, которые вряд ли будут проблемой.