Как отправлять события на стороне сервера из 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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