Я хочу реализовать службу 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 больше не отвечает. Таким образом, дальнейшие сообщения не отправляются на on_message. Так что только часть класса все еще отвечает!? Класс «два» по-прежнему отвечает, и скрипт все еще работает в режиме «пока правда».
Как правильно проверить функциональность такого класса?