Как бороться с нестабильными данными, полученными с RFID-ридера? - PullRequest
4 голосов
/ 31 мая 2011

Мое приложение должно подключаться и получать данные от RFID-считывателя каждые 2 секунды, поэтому оно разработано на платформе django. Вот соответствующие строки в views.py :

HOST = '192.168.0.1'
PORT = 50007
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
soc.settimeout(2)
soc.connect((HOST, PORT))
soc.send('tag.db.scan_tags(100)\r\n')
datum = soc.recv(128)

if datum.find("ok") > -1:
    soc.send('tag.read_id()\r\n')
    data = soc.recv(8192)

Приложение отобразит полученные данные в шаблон как {{data}} , если считыватель RFID обнаружит какой-либо тег RFID в своем поле. Проблема возникает, когда в поле нет тега или теги не могут быть прочитаны, переменная {{data}} ничего не отобразит на странице.

Я хочу, чтобы мое приложение показывало последние данные, которые можно прочитать. Если нет новых данных, просто покажите самую последнюю. Данные будут изменены только в случае поступления новых данных. Это сделает мое приложение более стабильным.

Любое предложение, пожалуйста? Большое спасибо.

1 Ответ

1 голос
/ 31 мая 2011

Одна из самых простых вещей - использовать инфраструктуру кеширования Django и хранить данные в локальной памяти, или в кэше памяти, или в базе данных и т. Д. Вы можете кэшировать любые полученные данные и использовать их. кэшированные данные, если вы не получили данные, или они ошибочны или что-то еще:

from django.core.cache import cache

# set cached data
cache.set('data', data)
# get cached data
cache.get('data')

Вы также можете хранить данные другими способами, например, на модели. Вам, вероятно, следует переместить часть чтения RFID из вида и использовать сельдерей (или что-то еще), чтобы запустить его как задачу, сохранить результаты и просто использовать последние сохраненные данные в вашем представлении

...