2016-10-26 3 views
0

私はそれが愚かな疑問であるかどうかわかりませんが、私はこの問題を解決することに本当に苦労しています。Pythonは常に変数を更新します

私はobdライブラリでコーディングしています。 これで私の問題は、変数の継続的な実現です。 たとえば、1つの変数が車の実際の速度を出力します。 この変数は、1秒または2秒ごとに更新する必要があります。このアップデートを行うには、私は、コード

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

の2行を実行する必要がありますが、私はいくつかのwhileループにし、if文のrpm変数を確認する必要があります。 (リアルタイムで)

このことを行う機会はありますか? (別のクラスまたはスレッドまたは何か)私のプログラミングプロジェクトで飛躍を遂げるのに役立ちます。

おかげ:)

+0

あなたは 'current_rpm'方法にそれらの2行を置くことはできますか?あなたのループで 'rpm'の代わりに' current_rpm() 'を使ってください。 –

答えて

0

代わりOBDの非同期インターフェイスを使用:

標準クエリ()関数がブロックされているので、それはUIイベントループに対して危険であることができます。これを処理するために、python-OBDには、標準OBDオブジェクトの代わりに使用できる非同期接続オブジェクトがあります。 AsyncはOBDのサブクラスであるため、すべての標準メソッドを継承します。しかし、Asyncはスレッド更新ループを制御するためにいくつかを追加します。このループは、あなたのコマンドの値を車両と最新の状態に保ちます。このようにして、ユーザーが自動車をクウェートすると、直ちに最新の応答が返されます。

更新ループは、start()およびstop()を呼び出すことによって制御されます。更新用のコマンドを購読するには、要求されたOBDCommandでwatch()を呼び出します。更新ループはスレッド化されているため、ループが停止している間だけコマンドを監視することができます。

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/

関連する問題