gpt4 book ai didi

python - Flask 发送流作为响应

转载 作者:太空狗 更新时间:2023-10-30 02:09:04 25 4
gpt4 key购买 nike

我正在尝试用另一台服务器(服务器#02)“代理”我的 Flask 服务器(我将其称为服务器#01)。它运行良好,除了一件事:当 Server#01 使用 send_from_directory() 时,我不知道如何重新发送该文件。

我的经典“代理”

result = requests.get(my_path_to_server01)
return Response(stream_with_context(result.iter_content()),
content_type = result.headers['Content-Type'])

有了文件响应,这需要几个小时...所以我尝试了很多方法。工作的人是:

result = requests.get(my_path_to_server01, stream=True)

with open('img.png', 'wb') as out_file:
shutil.copyfileobj(result.raw, out_file)

return send_from_directory('./', 'img.png')

我想“重定向”我的响应(“结果”变量),或发送/复制我的文件流。无论如何,我不想使用物理文件,因为它在我看来似乎不是正确的方式,我可以想象因此而发生的所有问题。

最佳答案

除了应该使用 stream=True,并为 response.iter_content 指定一个 chunk_size 之外,您的“经典”代理应该没有任何问题()

默认 chunk_size 是 1 字节,因此流式传输效率非常低,因此非常慢。尝试更大的 block 大小,例如10K 应该会产生更快的传输。这是代理的一些代码。

import requests
from flask import Flask, Response, stream_with_context

app = Flask(__name__)

my_path_to_server01 = 'http://localhost:5000/'

@app.route("/")
def streamed_proxy():
r = requests.get(my_path_to_server01, stream=True)
return Response(r.iter_content(chunk_size=10*1024),
content_type=r.headers['Content-Type'])

if __name__ == "__main__":
app.run(port=1234)

您甚至不需要在这里使用 stream_with_context(),因为您不需要访问 iter_content() 返回的生成器中的请求上下文。

关于python - Flask 发送流作为响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39272072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com