Как быть с нестабильными данными, полученными от считывателя RFID?

Мое приложение должно подключаться и получать данные от считывателя 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 }} ничего не показывает на странице.

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

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


person Protocole    schedule 31.05.2011    source источник


Ответы (1)


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

from django.core.cache import cache

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

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

person zeekay    schedule 31.05.2011
comment
Большое тебе спасибо. Это очень полезно для меня. - person Protocole; 31.05.2011