如何使多个PAHO MQTT客户端作为服务/守护程序运行



我想实现一个始终运行,接收和发送消息的PAHO MQTT Python服务。如果在任何情况下都发生错误,则应重新启动。

我实现了两个类,每个类都使用paho的loop_start()启动螺纹网络循环。然后,这些类具有一些调用其他类的回调函数。

目前,我有一个简单的python脚本,该脚本称为类和循环:

from one import one
from two import two
import time
one()
two()
while True:
    if one.is_alive():
        print("one is still alive")
    else:
        print("one died - do something!")
    time.sleep(1)

和我的班级"一个":

import paho.mqtt.client as mqtt
import json
class one():
    def __init__(self):
        self.__client = mqtt.Client(client_id = "one")
        self.__client.connect("localhost", 1883)
        self.__client.subscribe("one")
        self.__client.on_connect = self.__on_connect
        self.__client.on_message = self.__on_message
        self.__client.on_disconnect = self.__on_disconnect
        self.__client.loop_start()
    def __on_connect(self, client, userdata, flags, rc):
        print("one: on_connect")
    def __on_disconnect(self, client, userdata, flags, rc):
        print("one: on_disconnect")
    def __on_message(self, client, userdata, message):
        str_message = message.payload.decode('utf-8')
        message = json.loads(str_message)
        print("one: on_message: " + str(message))
    def is_alive(self):
        return True

但是 - 如果我发送一个产生错误的软件包(例如,腌制消息而不是JSON),我的" is_alive"函数仍然返回true,但是paho-implentation不再响应。因此,没有将其他消息发送到on_message。因此,只有班级的一部分仍然反应迅速!?"二"类仍响应迅速,脚本仍在" true"中运行。

如何正确检查此类类的功能?

我认为您必须构建像class1.isAlive()这样的检查器方法,该方法告诉您课程是否在等待请求。另外,我认为您必须在while True循环中构建它,而不是故障。

此外,您可以使用等待功能编写自己的活动。等待更饿了CPU,但反应迅速。例如,请参见此处。但这取决于您的Python版本。

最新更新