Ich möchte einen Paho MQTT Python Service implementieren, der immer läuft, Nachrichten empfängt und sendet. Wenn ein Fehler auftritt, sollte er neu gestartet werden.Wie man mehrere Paho MQTT Clients als Dienst/Daemon laufen lässt
Ich habe zwei Klassen implementiert, die jeweils eine Thread-Netzwerkschleife mit pahos loop_start() starten. Diese Klassen haben dann einige Callback-Funktionen, die andere Klassen aufrufen und so weiter.
Für jetzt habe ich ein einfaches Python-Skript, das die Klassen aufruft und Schleifen:
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)
Und hier meine Klasse „Eins“:
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
jedoch - wenn ich ein Paket senden, das erzeugt ein Fehler (eine gebeizte Nachricht anstelle von zB json) meine "is_alive" -Funktion gibt immer noch True zurück, aber die Paho-Implementierung reagiert nicht mehr. Es werden also keine weiteren Nachrichten an on_message gesendet. Also reagiert nur ein Teil der Klasse noch ?! Klasse "zwei" reagiert immer noch und das Skript läuft immer noch in "while True".
Wie überprüfe ich die Funktionalität einer solchen Klasse richtig?
Mögliche Duplikate von [wie Python-Skript als Dienst ausgeführt werden?] (Https://StackOverflow.com/Questions/16420092/How-To-Make-Python-Script-Run-AS-Service) – LeopoldVonBuschLight