求教 Fastapi 如何连续返回数据呀

36 天前
 reapear

比如我调用 api 执行一个任务,然后在任务中实时返回消息。类似下面这种逻辑

@app.get("/")
async def root():
    for i in range(10):
    	time.sleep(1)
        yield str(i)
1397 次点击
所在节点    Python
9 条回复
NickLuan
36 天前
噗,还能这么写?
street000
36 天前
SSE 或 WebSocket
chaunceywe
36 天前
from fastapi import FastAPI
from fastapi.responses import StreamingResponse

app = FastAPI()


async def fake_video_streamer():
for i in range(10):
yield b"some fake video bytes"


@app.get("/")
async def main():
return StreamingResponse(fake_video_streamer())
wjx0912
36 天前
@street000 good idea!
reapear
36 天前
@street000 感谢,了解了一下 WebSocket 这种是我想要的效果。
reapear
36 天前
@chaunceywe 这个好像,会等待所有 yield 结果才一起返回。
mmdsun
35 天前
@app.route("/sse", methods=["GET"])
def write():
def generate():
s = "output it token by token test output it token by token test"
for c in s:
yield c
time.sleep(0.02)

return Response(stream_with_context(generate()))

用浏览器试试看,输出效果是逐字的。不是整个返回
TomCN
35 天前
@reapear #6 如果你使用 postman 或者 swagger ,是会接收完成后显示的,你可以试着写一个 get 方法,浏览器直接访问接口,然后就会一部分一部分的显示出来了,前端页面接收的话,要使用 fetch 来请求
realJamespond
35 天前
spring 可以用 defered response 配合长轮询

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1031745

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX