下面的代碼沒有超出with. 當客戶端斷開連接時,有什么方法可以關閉套接字?
import fastapi
import uvicorn
import socket
def gen_video(port):
with socket.socket() as s:
s.connect(("127.0.0.1", port))
while True:
yield s.recv(1024)
app = fastapi.FastAPI()
@app.get("/stream")
async def stream():
return fastapi.responses.StreamingResponse(gen_video(1234), media_type="video/ogg")
if __name__ == "__main__":
uvicorn.run(app, port=8000)
uj5u.com熱心網友回復:
一種使用 fastapi BackgroundTasks 關閉套接字的方法
import fastapi
import uvicorn
import socket
def read_socket(s):
while True:
yield s.recv(1024)
app = fastapi.FastAPI()
@app.get("/stream")
async def stream(background_tasks: fastapi.background.BackgroundTasks):
s = socket.socket()
s.connect(("127.0.0.1", 1234))
background_tasks.add_task(lambda f: f.close(), s)
return fastapi.responses.StreamingResponse(read_socket(s), media_type="video/ogg")
if __name__ == "__main__":
uvicorn.run(app, port=8000)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/532384.html
