2016-10-26 2 views
0

바보 같은 질문인지는 모르겠지만이 문제를 해결하는 데 정말로 어려움을 겪고 있습니다.Python은 지속적으로 변수를 새로 고칩니다.

저는 obd 라이브러리로 코딩하고 있습니다. 내 문제는 내 변수의 지속적인 구현입니다. 예를 들어, 하나의 변수가 자동차의 실제 속도를 출력합니다. 이 변수는 매초 또는 2 초마다 업데이트해야합니다. 이 업데이트를하려면 내가 코드

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

의 2 개 라인을 실행해야하지만 일부 동안 루프와 문 경우 RPM 변수를 확인해야합니다. (실시간으로)

이 작업을 수행 할 수있는 기회가 있습니까? (다른 클래스 또는 스레드 또는 무언가) 정말 내 프로그래밍 프로젝트에서 앞으로 도약을 도울 것입니다.

감사합니다 :)

+0

당신은'current_rpm' 방법으로 두 줄을 넣을 수 있습니까? 루프에서'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/

관련 문제