2017-11-17 6 views
0

Ich verwende das Beispiel aus dem Proben/basicPubSub/basicPubSub.py mit useWebsocket=TrueAWS IoT MQTT-Client für Python - Wie abonnieren Sie für immer?

habe ich einige Datei my_test_file.py wo ich connect() und() mit einer Nachricht Rückruf abonnieren. Angenommen, der Rückruf schreibt nur in eine Protokolldatei. Wie kann ich diese Datei immer laufen lassen, so dass, wenn ich von irgendwo anders, heute, morgen, in einem Jahr veröffentlichen werde - wird diese Protokolldatei ständig mit der Nachricht geschrieben?

from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient 

client = AWSIoTMQTTClient('client_id', useWebsocket=True) 
client.configureEndpoint('host', port) 
client.configureCredentials('path to cert') 

client.configureAutoReconnectBackoffTime(1, 32, 20) 
client.configureOfflinePublishQueueing(-1) 
client.configureDrainingFrequency(2) 
client.configureConnectDisconnectTimeout(10) 
client.configureMQTTOperationTimeout(5) 
client.connect() 

client.subscribe('topic name', 1, _some_callback_func) 

while True: 
    time.sleep(1) 

Ist mit einer unendlichen while-Schleife am Ende des my_test_file.py der einzige Weg? Mit der unendlichen While-Schleife leite ich die Datei und es ist ein Blocking-Prozess, aber es ist unbegrenzt abonniert. Ist es eine Kombination aus einem Systemdienst und dieser unendlichen While-Schleife? Ich sah einige loop_forever() Methoden in der Paho MQTT-Client, hat die AWS iot mqtt Client etwas ähnliches? Ist loop_forever() nur eine unendliche while-Schleife implementiert?

+0

Veröffentlichen Sie mehr von Ihrem Code. – hardillb

Antwort

0

Infinite Looping ist der richtige Weg, um damit umzugehen, solange Sie wissen, was zu tun ist, nicht den Hauptprozess (Kernlogik) zu unterbrechen. Um dies zu tun, empfehle ich, dieses Skript in einer neuen Python-Datei zu isolieren, damit es vom Haupt-Python-Skript als Unterprozess ausgeführt wird. Also, bevor Sie mit den Händen beginnen, lesen Sie Multiprocessing - process-based parallelism.

Normalerweise muss etwas immer den Python-Prozess im Speicher laufen lassen, es sei denn, das Betriebssystem wird unerwartet neu gestartet.

Es scheint nicht eine elegante Art, damit umzugehen, aber ich rate Ihnen, eine Ausführungsverwaltung Struktur hinter diesem Python-Skript zu erstellen, wie immer starten Sie Ihr Python-Skript nach "Bootloader" Maschine/Gerät, ein weiteres Watchdog Skript oder etwas Ähnliches, um einige Probleme mit der Internetverbindung zu verhindern, das System neu starten zu lassen oder sich mit dem Internet zu verbinden.