Ich habe eine mqtt Client-Anwendung, die Themen basierend auf einer Konfigurationsdatei abonniert. Etwas wie:Paho MQTT-Client unterbrechen, um Abonnements neu zu laden
def connectMQTT():
global Connection
Connection = Client()
Connection.on_message = handleQuery
for clientid in clientids.allIDs(): # clientids.allIDs() reads files to get this
topic = '{}/{}/Q/+'.format(Basename, clientid)
print('subscription:', topic)
Connection.subscribe(topic)
Ich habe, wie es mit einem einfachen Aufruf mit:
def main():
connectMQTT()
Connection.loop_forever()
Die loop_forever
wird für immer blockieren. Aber ich würde gerne bemerken, wenn die Information gelesen von clientids.allIDs()
veraltet ist und ich neu verbinden sollte, zwingt es neu zu abonnieren.
kann ich eine Änderung der Dateien mit pyinotify
erkennen:
def filesChanged():
# NOT SURE WHAT TO DO HERE
def watchForChanges():
watchManager = pyinotify.WatchManager()
notifier = pyinotify.ThreadedNotifier(watchManager, FileEventHandler(eventCallback))
notifier.start()
watchManager.add_watch('/etc/my/config/dir', pyinotify.IN_CLOSE_WRITE | pyinotify.IN_DELETE)
Grundsätzlich, ich brauche loop_forever
(oder einen anderen paho MQTT Mechanismus) zu laufen, bis ein Signal von den pyinotify Maschinen kommt. Ich bin mir nicht sicher, wie man diese zwei zusammenschweißt. In Pseudo-Code, ich etwas möchte ich wie
Ich bin mir nicht sicher, wie das aber zu tun.
Haben Sie sich die anderen "loop" -Funktionen in den Dokumenten angesehen? – hardillb
Ja, ich spiele mit 'loop_start()' und 'loop_stop()' und versuche im selben Moment einen non-threaded Notifier. Bis jetzt noch kein Glück. –
Auch keine Notwendigkeit, die Verbindung zu trennen, nur eine Liste der Themen abonniert zu halten, dann Diff gegen die neue Liste, für die alten nicht mehr abbestellen und abonnieren Sie die neue – hardillb