亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

http通過StreamingHttpResponse完成連續(xù)的數(shù)據(jù)傳輸長鏈接方式

 更新時(shí)間:2022年02月12日 09:29:34   作者:Hayley-L  
這篇文章主要介紹了http通過StreamingHttpResponse完成連續(xù)的數(shù)據(jù)傳輸長鏈接方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

http通過StreamingHttpResponse完成連續(xù)的數(shù)據(jù)傳輸長鏈接

問題

http服務(wù)之間傳遞結(jié)果流

一個(gè)由flask封裝起來的算法,一個(gè)由django封裝的后臺(tái),我希望在django里通過requests調(diào)用flask的算法接口,flask可以分析一幀返回一幀結(jié)果,追求分析結(jié)果的實(shí)時(shí)返回,而不是完全分析完再完整返回結(jié)果

為了能完整返回結(jié)果,暫時(shí)想到的模式有以下三種:

  • 一問一答:等待完整的分析結(jié)果,然后返回,最不濟(jì)就用這種
  • 我要你給(長鏈接):flask返回一個(gè)generator,django取next就得到下一個(gè)的結(jié)果
  • 你有你給(理想,長鏈接):建立長鏈接,flask每分析出一幀結(jié)果,就返回

一次結(jié)果,直到分析結(jié)束,關(guān)閉連接

看到flask中有個(gè)flask_socketio建立socket連接,還沒有實(shí)驗(yàn)

暫時(shí)用StreamingHttpResponse,generater能實(shí)現(xiàn)實(shí)時(shí)分析的感覺,屬于第三種模式(你有你給)

django的StreamingHttpResponse可以返回generater,request調(diào)用返回generate的接口的時(shí)候,通過contextlib 的closing對(duì)流進(jìn)行處理:

輸出

#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())

輸入

不區(qū)分flask,django,都可以通過request,contextlib 實(shí)現(xiàn)

#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)

StreamingHttpResponse和HttpResponse

在修改以前的文件下載功能時(shí),發(fā)現(xiàn)一個(gè)文件有5G,用HttpResponse實(shí)現(xiàn)時(shí),服務(wù)器返回502錯(cuò)誤,查看nginx log時(shí),發(fā)現(xiàn)nginx log記錄的是: upstream prematurely closed connection while reading response header from upstream。應(yīng)該是nginx服務(wù)器從上游獲取數(shù)據(jù)時(shí)超時(shí)了。

查了很多辦法,修改了nginx的配置,但是仍然超時(shí)。

絕望之下,查了一下Django的文檔,發(fā)現(xiàn)了StreamingHttpResponse,試了一下效率提高了很多。

后來仔細(xì)查了一下發(fā)現(xiàn)HttpResponse在使用文件迭代器時(shí):

HttpResponse will consume the iterator immediately, store its content as a string, and discard it.

HttpResponse會(huì)直接使用迭代器對(duì)象,將迭代器對(duì)象的內(nèi)容存儲(chǔ)城字符串,然后返回給客戶端,同時(shí)釋放內(nèi)存??梢援?dāng)文件變大看出這是一個(gè)非常耗費(fèi)時(shí)間和內(nèi)存的過程。

而StreamingHttpResponse是將文件內(nèi)容進(jìn)行流式傳輸,

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.

這是一種非常省時(shí)省內(nèi)存的方法。但是因?yàn)镾treamingHttpResponse的文件傳輸過程持續(xù)在整個(gè)response的過程中,所以這有可能會(huì)降低服務(wù)器的性能。

參考文檔

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Sentry的安裝、配置、使用教程(Sentry日志手機(jī)系統(tǒng))

    Sentry的安裝、配置、使用教程(Sentry日志手機(jī)系統(tǒng))

    Sentry?是一個(gè)實(shí)時(shí)事件日志記錄和聚合平臺(tái),由于ExceptionLess官方提供的客戶端只有.Net/.NetCore平臺(tái)和js的,本文繼續(xù)介紹另一個(gè)日志收集系統(tǒng)Sentry,感興趣的朋友一起看看吧
    2022-07-07
  • python爬蟲MeterSphere平臺(tái)執(zhí)行報(bào)告流程解析

    python爬蟲MeterSphere平臺(tái)執(zhí)行報(bào)告流程解析

    這篇文章主要為大家介紹了python爬蟲MeterSphere平臺(tái)執(zhí)行報(bào)告流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 解決python3捕獲cx_oracle拋出的異常錯(cuò)誤問題

    解決python3捕獲cx_oracle拋出的異常錯(cuò)誤問題

    今天小編就為大家分享一篇解決python3捕獲cx_oracle拋出的異常錯(cuò)誤問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • pytest中fixture函數(shù)使用

    pytest中fixture函數(shù)使用

    本文主要介紹了pytest中fixture函數(shù)使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python實(shí)現(xiàn)公司年會(huì)抽獎(jiǎng)程序

    python實(shí)現(xiàn)公司年會(huì)抽獎(jiǎng)程序

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)公司年會(huì)抽獎(jiǎng)程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Python?OpenCV實(shí)現(xiàn)圖像傅里葉變換

    Python?OpenCV實(shí)現(xiàn)圖像傅里葉變換

    傅里葉變換,也稱作傅立葉變換,表示能將滿足一定條件的某個(gè)函數(shù)表示成三角函數(shù)(正弦和/或余弦函數(shù))或者它們的積分的線性組合。本文將介紹如何通過OpenCV實(shí)現(xiàn)圖像的傅里葉變換,需要的可以參考一下
    2022-01-01
  • openCV入門學(xué)習(xí)基礎(chǔ)教程第二篇

    openCV入門學(xué)習(xí)基礎(chǔ)教程第二篇

    人臉識(shí)別,物體檢測(cè),OpenCV是基石,下面這篇文章主要給大家介紹了關(guān)于openCV入門學(xué)習(xí)基礎(chǔ)教程的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • 對(duì)Python中Iterator和Iterable的區(qū)別詳解

    對(duì)Python中Iterator和Iterable的區(qū)別詳解

    今天小編就為大家分享一篇對(duì)Python中Iterator和Iterable的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python JSON模塊的使用詳情

    Python JSON模塊的使用詳情

    這篇文章主要介紹了Python JSON模塊的使用詳情,JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,易于人閱讀和編寫下面文章圍繞Python JSON模塊的相關(guān)資料展開內(nèi)容,需要的小伙伴可以參考一下,希望 對(duì)你有所幫助
    2021-12-12
  • python實(shí)現(xiàn)百度文庫自動(dòng)化爬取

    python實(shí)現(xiàn)百度文庫自動(dòng)化爬取

    項(xiàng)目是合法項(xiàng)目,只是進(jìn)行數(shù)據(jù)解析而已,不能下載看不到的內(nèi)容.部分文檔在電腦端不能預(yù)覽,但是在手機(jī)端可以預(yù)覽,所有本項(xiàng)目把瀏覽器瀏覽格式改成手機(jī)端,支持Windows和Ubuntu. 本項(xiàng)目使用的是chromedriver來控制chrome來模擬人來操作來進(jìn)行文檔爬取
    2021-04-04

最新評(píng)論