Как запустить MQTT-подписчика в потоке - PullRequest
0 голосов
/ 19 февраля 2019

Я разрабатываю подписчика MQTT с paho.mqtt на python.Учитывая список тем, мне нужно запустить подписчика для каждой в отдельном потоке или процессе.Мой код работает хорошо, когда я запускаю подписчиков в главном потоке, но если я делаю это в потоке, обратный вызов никогда не вызывается.

import paho.mqtt.client as mqtt
import time
import threading

class MQTTSubscriber():

    def __init__(self, mqtt_server, mqtt_topic):
        self.__mqtt_server = mqtt_server
        self.__mqtt_topic = mqtt_topic

    def __on_message(self, client, userdata, message):

        payload = message.payload.decode("utf-8")
        print(payload)

    def start(self):

        self.__client = mqtt.Client("MQTTClient")
        self.__client.on_message = self.__on_message

        self.__client.connect(self.__mqtt_server)

        print("Subscribing to topic " + str(self.__mqtt_topic))
        self.__client.subscribe(self.__mqtt_topic)

        self.__client.loop_forever()

И это моя основная программа:

topics = ["topic1", "topic2"]

for topic in topics:
    mqttSubscriber = MQTTSubscriber("10.0.1.174", topic)
    # mqttSubscriber.start()
    thread = threading.Thread(target = mqttSubscriber.start)
    thread.setDaemon(True)
    thread.start()

while True:
    pass

Есть идеи, что происходит?

...