2016-10-26 2 views
0

Je ne sais pas si c'est une question stupide, mais je suis vraiment aux prises avec la résolution de ce problème.Python constamment actualiser la variable

Je suis en train de coder avec la bibliothèque OBD. Maintenant, mon problème avec cela est l'actualisation continue de mes variables. Par exemple, une variable affiche la vitesse réelle de la voiture. Cette variable doit être mise à jour toutes les secondes ou toutes les deux secondes. Pour ce faire, cette mise à jour je dois courir 2 lignes de code

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

mais je dois vérifier la variable rpm dans certaines boucles de temps et si les déclarations. (en temps réel)

Y a-t-il une opportunité pour faire ce travail? (une autre classe ou thread ou quelque chose) Cela m'aiderait vraiment à faire un bond en avant dans mon projet de programmation.

Merci :)

+0

Pouvez-vous mettre ces deux lignes dans une méthode 'current_rpm'? Utilisez simplement 'current_rpm()' au lieu de 'rpm' dans votre boucle. –

Répondre

0

utilisent l'interface Async au lieu de l'OBD:

Puisque la fonction requête standard() bloque, il peut être un danger pour les boucles d'événements UI. Pour résoudre ce problème, python-OBD dispose d'un objet de connexion Async pouvant être utilisé à la place de l'objet OBD standard. Async est une sous-classe de l'OBD et hérite donc de toutes les méthodes standard. Cependant, Async en ajoute quelques-unes afin de contrôler une boucle de mise à jour threadée. Cette boucle gardera les valeurs de vos commandes à jour avec le véhicule. De cette façon, lorsque l'utilisateur interroge la voiture, la dernière réponse est renvoyée immédiatement.

La boucle de mise à jour est contrôlée en appelant start() et stop(). Pour vous abonner à une commande de mise à jour, appelez watch() avec votre OBDCommand demandé. Comme la boucle de mise à jour est threadée, les commandes ne peuvent être regardées que lorsque la boucle est arrêtée.

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/