Как отправлять события на стороне сервера из Python (fastapi) при вызове функции, которая обновляет состояние серверной ⇐ Python

Программы на Python
Anonymous
Как отправлять события на стороне сервера из Python (fastapi) при вызове функции, которая обновляет состояние серверной

Сообщение Anonymous »

У меня следующая проблема: учитывая, что на бэкэнде работает fastapi, у которого есть конечная точка потоковой передачи, которая используется для обновления внешнего интерфейса, я хочу отправлять эти обновления каждый раз, когда вызывается функция, обновляющая состояние бэкэнда (что может быть либо запланированным заданием, либо другой конечной точкой, которая была поражена и вызвала обновление состояния).

Упрощенная версия того, что я хотел бы реализовать, будет такой:< /p>

Код: Выделить всё

from fastapi import FastAPI
from starlette.responses import StreamingResponse

class State:
def __init__(self):
self.messages = []

def update(self, new_messages):
self.messages = new_messages
# HERE: notify waiting stream endpoint

app = FastAPI()

state = State()

@app.get('/stream')
def stream():
def event_stream():
while True:
# HERE lies the question: wait for state to be update
for message in state.messages:
yield 'data: {}\n\n'.format(json.dumps(message))
return StreamingResponse(event_stream(), media_type="text/event-stream")
И мне бы хотелось, чтобы это продолжалось вечно. Каждый раз, когда состояние обновляется, event_stream разблокируется и отправляет сообщения.

Я просмотрел многопоточность и асинхронность, но у меня такое ощущение, что я отсутствует простое представление о том, как это сделать в Python.

Подробнее здесь: https://stackoverflow.com/questions/588 ... unction-th

Вернуться в «Python»