Daten an Schleife senden, um diese auszugeben

Code-Stücke können hier veröffentlicht werden.
Antworten
PSaR
User
Beiträge: 4
Registriert: Sonntag 13. April 2014, 22:38

Hallo,

folgende Situation (ich vereinfache das mal hier alles):
Ich habe eine Python-Klasse, die unter anderem ein Attribut/Instanzvariable "Nachricht" und eine Methode "write()" enthält. Wenn write() aufgerufen wird, startet eine Endlosschleife und passt kontinuierlich den Text aus "Nachricht" an und sendet ihn an ein LCD-Display (2x16 Zeilen). Wer es genau wissen möchte, es es geht um das Skript http://andypi.co.uk/downloads/AndyPi_LCD.py, welches ich angepasst habe, write() entspricht scroll_clock() [wie gesagt, ich versuche die Situation einfach zu beschreiben].
Meine Klasse importiere ich in einem anderen Skript und erstelle ein Objekt. Den Nachrichtentext schreibe ich in "Nachricht" (habe ich hinzugefügt) und starte write(), welches den Text aus der Variable auch problemlos auf dem LCD darstellt.
Mein Problem ist jetzt, dass ich alle paar Minuten einen Sensor abfrage und gerne immer die aktuellen Werte anzeigen lassen möchte. Doch wie bekomme ich das hin? Die write() Methode läuft ja endlos, ich kann die Variable "Nachricht" also nicht so einfach anpassen, ohne die Schleife vorher abzubrechen. Da die Werte vom Sensor nicht regelmäßig abgerufen werden, würde ich am liebsten am Ende des Abrufvorgangs die Variable "Nachricht" aktualisieren. Die Werte des Sensors landen zwar auch in einer MySQL-DB, jedoch möchte ich diese eigentlich nicht alle 10 Sek abfragen, da es zum Teil nur alle 10 Minuten neue Werte gibt.

Ich hoffe ihr habt einen Tipp für mich.
BlackJack

@PSaR: Schau Dir mal das `threading`-Modul an.
PSaR
User
Beiträge: 4
Registriert: Sonntag 13. April 2014, 22:38

@BlackJack: Danke, für den Tipp. Ich habe es jetzt einigermaßen am laufen mit verschiedenen Threads und kann auch zwischendurch Abfragen durchführen. War allerdings nicht ganz einfach, da ich die Methode, welche den Text anpasst dafür noch mal komplett umschreiben musste, damit ich den Thread schnell wieder beenden kann.
Ich habe mir nun überlegt, dass es doch ganz nett wäre, wenn mein Hauptprogramm mit den Threads als "Server-Prozess" fungieren würde und ich von einem anderen Python Skript aus die Datenaktualisierung anstoßen könnte (macht der Server per SQL) oder die aktuellen Werte rübersende, sodass der Display-Text aktualisiert wird. Ich habe mich schon ein bisschen informiert, weiß aber noch nicht genau, welches Modul dafür angemessen ist. Ich könnte das Ganze über TCP oder UDP abwickeln, aber da es reicht, wenn ich lokal eine Prozess zu Prozess-Kommunikation habe ist das glaube ich noch nicht optimal. Welche Möglichkeit habe ich sonst noch und was empfiehlt sich für mein Vorhaben?

Grüße
PSaR
Antworten