我有以下问题:给定一个运行fastapi的后端,具有流式传输端点,用于更新前端,我希望每次调用更新后端状态的函数时(可以是按计划作业或触发状态更新的不同端点),都能发送这些更新。
我想实现的简化版本如下:
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
就会解除阻塞并发送消息。
我已经查看了线程和asyncio,但我有一种感觉,我错过了如何在Python中完成这个简单概念的东西。