2016-10-26 16 views
0

Я не знаю, является ли это глупым вопросом, но я действительно борюсь с решением этой проблемы.Python постоянно обновляет переменную

Я кодирую библиотеку obd. Теперь моя проблема заключается в непрерывной актуализации моих переменных. Например, одна переменная выводит фактическую скорость автомобиля. Эта переменная должна обновляться каждую секунду или 2 секунды. Для того, чтобы сделать это обновление, я должен запустить 2 строки кода

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

, но я должен проверить переменную оборотов в минуту в некоторых циклах в то время и если заявления. (в реальном времени)

Есть ли возможность получить эту штуку? (другой класс или нить или что-то в этом роде). Это действительно помогло бы мне сделать шаг вперед в моем проекте программирования.

Благодаря :)

+0

Вы можете поместить эти две строки в 'current_rpm' метод? Просто используйте 'current_rpm()' вместо 'rpm' в вашем цикле. –

ответ

0

использовать интерфейс Async вместо OBD:

Поскольку стандартного запроса() функция блокирования, он может представлять опасность для петель событий пользовательского интерфейса. Чтобы справиться с этим, python-OBD имеет объект соединения Async, который можно использовать вместо стандартного объекта OBD. Async является подклассом OBD и поэтому наследует все стандартные методы. Тем не менее, Async добавляет несколько, чтобы управлять потоковым циклом обновления. Этот цикл будет поддерживать значения ваших команд в актуальном состоянии с помощью транспортного средства. Таким образом, когда пользователь запрашивает автомобиль, последний ответ возвращается немедленно.

Цикл обновления управляется вызовами start() и stop(). Чтобы подписаться на команду для обновления, вызовите watch() с запрошенной OBDCommand. Поскольку цикл обновления имеет резьбу, команды можно наблюдать только при остановке цикла.

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/