2016-10-26 8 views
0

Ich weiß nicht, ob es eine dumme Frage ist, aber ich habe wirklich mit der Lösung dieses Problems zu kämpfen.Python konstant aktualisieren Variable

Ich bin mit der OBD-Bibliothek codieren. Jetzt ist mein Problem damit die kontinuierliche Aktualisierung meiner Variablen. Zum Beispiel gibt eine Variable die tatsächliche Geschwindigkeit des Autos aus. Diese Variable muss jede Sekunde oder 2 Sekunden aktualisiert werden. Um dieses Update muss ich laufen zwei Zeilen Code

cmd = obd.commands.RPM 
rpm = connection.query(cmd) 

aber ich habe zu prüfen, die Drehzahl variabel in einigen While-Schleifen und if-Anweisungen. (in Echtzeit)

Gibt es irgendeine Möglichkeit, diese Sache zu erledigen? (eine andere Klasse oder ein Thread oder etwas) Es würde mir wirklich helfen, einen Sprung in meinem Programmierprojekt zu machen.

Thanks :)

+0

Können Sie setzen diese beiden Linien in eine 'current_rpm' Methode? Verwenden Sie einfach 'current_rpm()' anstelle von 'rpm' in Ihrer Schleife. –

Antwort

0

die Async-Schnittstelle anstelle des OBD verwenden:

Da die Standardabfrage() Funktion blockiert, kann es eine Gefahr für die UI Ereignisschleifen sein. Um damit umzugehen, hat Python-OBD ein Async-Verbindungsobjekt, das anstelle des Standard-OBD-Objekts verwendet werden kann. Async ist eine Unterklasse von OBD und erbt daher alle Standardmethoden. Async fügt jedoch einige hinzu, um eine Thread-Update-Schleife zu steuern. Diese Schleife hält die Werte Ihrer Befehle auf dem aktuellen Stand des Fahrzeugs. Auf diese Weise wird die letzte Antwort sofort zurückgegeben, wenn der Benutzer das Auto abfragt.

Die Update-Schleife wird durch Aufruf von start() und stop() gesteuert. Um einen Befehl zum Aktualisieren zu abonnieren, rufen Sie watch() mit dem angeforderten OBDCommand auf. Da die Update-Schleife Threading ist, können Befehle nur überwacht werden, während die Schleife beendet ist.

import obd 

connection = obd.Async() # same constructor as 'obd.OBD()' 

connection.watch(obd.commands.RPM) # keep track of the RPM 

connection.start() # start the async update loop 

print connection.query(obd.commands.RPM) # non-blocking, returns immediately 

http://python-obd.readthedocs.io/en/latest/Async%20Connections/