<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
http服務之間傳遞結果流
一個由flask封裝起來的演演算法,一個由django封裝的後臺,我希望在django裡通過requests呼叫flask的演演算法介面,flask可以分析一幀返回一幀結果,追求分析結果的實時返回,而不是完全分析完再完整返回結果
為了能完整返回結果,暫時想到的模式有以下三種:
一次結果,直到分析結束,關閉連線
看到flask中有個flask_socketio建立socket連線,還沒有實驗
暫時用StreamingHttpResponse,generater能實現實時分析的感覺,屬於第三種模式(你有你給)
django的StreamingHttpResponse可以返回generater,request呼叫返回generate的介面的時候,通過contextlib 的closing對流進行處理:
#django 演演算法端,輸出流 from django.http import StreamingHttpResponse def stream_response(request): def generate(): for i in range(10): print(i) yield 'hi ' + str(i) print('sleep 3') time.sleep(1) return StreamingHttpResponse(generate(), )
#flask 演演算法端,輸出流 @app.route('/re', methods=('POST', )) def re(): @flask.stream_with_context def generate(): for i in range(10): print(i) yield 'hi ' + str(i) print('sleep 3') time.sleep(1) return flask.Response(generate())
不區分flask,django,都可以通過request,contextlib 實現
#flask 演演算法端 @app.route('/test', methods=['POST', 'GET']) def test(): url = 'http://172.16.68.151:8000/test2' from contextlib import closing with closing(requests.get(url, stream=True)) as r1: for i in r1.iter_content(): print(i)
在修改以前的檔案下載功能時,發現一個檔案有5G,用HttpResponse實現時,伺服器返回502錯誤,檢視nginx log時,發現nginx log記錄的是: upstream prematurely closed connection while reading response header from upstream。應該是nginx伺服器從上游獲取資料時超時了。
查了很多辦法,修改了nginx的設定,但是仍然超時。
絕望之下,查了一下Django的檔案,發現了StreamingHttpResponse,試了一下效率提高了很多。
後來仔細查了一下發現HttpResponse在使用檔案迭代器時:
HttpResponse will consume the iterator immediately, store its content as a string, and discard it.
HttpResponse會直接使用迭代器物件,將迭代器物件的內容儲存城字串,然後返回給使用者端,同時釋放記憶體。可以當檔案變大看出這是一個非常耗費時間和記憶體的過程。
而StreamingHttpResponse是將檔案內容進行流式傳輸,
StreamingHttpResponse在官方檔案的解釋是:
The StreamingHttpResponse class is used to stream a response from Django to the browser. You might want to do this if generating the response takes too long or uses too much memory.
這是一種非常省時省記憶體的方法。但是因為StreamingHttpResponse的檔案傳輸過程持續在整個response的過程中,所以這有可能會降低伺服器的效能。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45