У меня есть веб-сокет, к которому я получаю доступ из python, как показано ниже.
Затем я хочу открыть этот веб-сокет (со слегка измененными данными) через спокойный интерфейс (он не может быть веб-сокетом для моих целей) где клиент может пропинговать его и должен получать самую последнюю полностью обновленную информацию (каждый раз, когда полный набор данных с самого начала).
Как можно избежать перезапуска веб-сокета при каждом пинге клиента restful interface?
Код выглядит следующим образом:
websocket:
class WebSocketExample:
async def _get_data(self):
self.data= []
async with websockets.connect(uri) as websocket:
while True:
try:
data_raw= await asyncio.wait_for(websocket.recv(), 5)
self.data+= data_raw
except asyncio.TimeoutError:
break
def initiate_websocket(self):
asyncio.set_event_loop(asyncio.new_event_loop())
loop = asyncio.get_event_loop()
loop.run_until_complete(self._get_data())
loop.close()
Restful-интерфейс использует flask и просто создает экземпляр класса WebSocketExample и получает данные назад:
def restful_call():
websocket = WebSocketExample()
return websocket.data
Проблема заключается в том, что каждый раз, когда новый вызов выполняется через интерфейс restful, ему нужно будет с самого начала снова загружать все из веб-сокета.
Что бы хороший способ переписать этот код (концептуально) и заставить веб-сокет непрерывно загружать все данные в фоновом режиме в память, а затем o обслуживать спокойный интерфейс одновременно? Мой веб-сокет очень медленный, и данные, которые я получаю от него, должны быть предварительно обработаны. Я бы хотел не записывать это в базу данных, а только хранить в памяти. Как я могу сделать все это во время работы успокоительного интерфейса, который, я полагаю, будет управлять процессом. Есть ли необходимость в нескольких потоках? Любые предложения архитектуры будут оценены.