在Flask Web應用開發中,常常需要模擬ChatGPT的實時數據傳輸效果,即數據生成的同時即時傳輸給客戶端,而非等待所有數據生成完畢再一起發送。本文將介紹如何利用Flask實現這種流式傳輸,并解決傳統方法中存在的延遲問題。
傳統方法的問題在于,response對象在接收數據生成函數的返回值時,會阻塞直到函數完全執行完畢,才將所有數據一次性返回客戶端。這導致客戶端必須等待整個生成過程結束后才能看到任何輸出。
為了實現實時傳輸,我們需要借助Flask的stream_with_context裝飾器。該裝飾器確保每次生成數據時立即發送到客戶端,避免延遲。
改進后的代碼如下:
from flask import Flask, Response, stream_with_context from time import sleep app = Flask(__name__) @app.route('/stream') def stream(): def generate(): for i in range(1, 21): print(i) yield f'This is item {i}n' sleep(0.5) return Response(stream_with_context(generate()), mimetype='text/plain') if __name__ == '__main__': app.run(debug=True)
關鍵在于將stream_with_context應用于generate()函數的返回值。這使得response對象在每次yield操作后立即發送數據,從而實現實時傳輸效果。與傳統方法相比,此改進版本能夠更準確地模擬ChatGPT的實時響應。 generate()函數的內容可根據實際需求調整,例如從數據庫讀取數據或執行復雜計算,只要每次生成少量數據并使用yield返回即可。 這提供了一種更靈活高效的流式數據傳輸方案。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END