Я разрабатываю веб-интерфейс для определенного устройства, которое предоставляет свой собственный API. Указанный веб-интерфейс может одновременно управлять несколькими устройствами. Данные извлекаются из устройства посредством опроса с помощью настраиваемого API, поэтому было бы предпочтительнее сделать его асинхронным.Шаблон проектирования для нескольких потребителей и одного источника данных
Наиболее очевидным является то, что поток опроса, который опросает данные, сохраняет в единый процесс Singleton с помощью семафоров, а затем потоки веб-сервера будут извлекать данные из упомянутого синглтона и показывать его. Я не большой поклонник синглтонов или плетущих вместе проектов, поэтому я думал о том, что, возможно, отделил источник данных poller от веб-сервера, зациклив его обратно на локальном интерфейсе и используя что-то вроде XML-RPC для использования данных.
Приложение не обязательно должно быть «предприимчивым» или масштабируемым на самом деле, так как к нему можно будет получить доступ всего несколькими людьми одновременно, но я бы предпочел сделать его надежным, не смешивая два типа логики вместе. В Python есть текущая реализация с использованием CherryPy, и это самый большой мишень ужасного дизайна, который я когда-либо видел. Я чувствую, что если я пойду с самым очевидным дизайном, я просто закончу переоценку той же самой ужасной вещи по-своему.
«один источник данных»! = «Может управлять несколькими приборами» – katrielalex
В моих целях это не имеет значения, поскольку каждый потребитель будет рассматривать все данные в целом. Вроде бы, если вы настроили ничто не кластер RDMBS, это все равно единственный источник данных. – Novikov