python httpストリーミングHttpResponseによる連続データ転送長リンクの完了
7029 ワード
質問:httpサービス間で結果ストリームを渡すflaskでカプセル化されたアルゴリズム、djangoでカプセル化されたバックグラウンド、私はdjangoの中でrequestsを通じてflaskのアルゴリズムインタフェースを呼び出すことを望んで、flaskは1フレームを分析して1フレームの結果を返すことができて、分析結果のリアルタイムの戻りを追求して、完全に分析してから完全に結果を返すのではありません
結果を完全に返すために、一時的に思いついたパターンは以下の3つあります.1つの質問に答えます.完全な分析結果を待って、それから戻って、最も役に立たないのはこれです.flaskはgeneratorを返して、djangoはnextを取って次の結果を得ます.あなたはあなたにあげます(理想、長いリンク):長いリンクを確立して、flaskは1フレームの結果を分析します.解析が終了するまで結果を返し、接続を閉じます.
flaskにflaskがありますsocketioはsocket接続を確立し、まだ実験していない.
一時的にStreamingHttpResponse、generaterでリアルタイム分析の感覚を実現でき、3番目のモード(あなたが与える)djangoに属するStreamingHttpResponseはgeneraterを返すことができ、requestがgenerateを返すインタフェースを呼び出すとき、contextlibのclosing対流で処理します.出力: 入力:flask,djangoを区別せずにrequest,contextlibで を実現
結果を完全に返すために、一時的に思いついたパターンは以下の3つあります.1つの質問に答えます.完全な分析結果を待って、それから戻って、最も役に立たないのはこれです.flaskはgeneratorを返して、djangoはnextを取って次の結果を得ます.あなたはあなたにあげます(理想、長いリンク):長いリンクを確立して、flaskは1フレームの結果を分析します.解析が終了するまで結果を返し、接続を閉じます.
flaskにflaskがありますsocketioはsocket接続を確立し、まだ実験していない.
一時的にStreamingHttpResponse、generaterでリアルタイム分析の感覚を実現でき、3番目のモード(あなたが与える)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
@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)