Flask &引用;BrokenPipeError“;带烧瓶和工具带

Flask &引用;BrokenPipeError“;带烧瓶和工具带,flask,python-requests,toolbelt,Flask,Python Requests,Toolbelt,我试图更准确地理解Http连接如何与Flask一起工作,因此我尝试编写一个非常简单的应用程序,以及另一个与请求和请求工具带的简单连接: app = Flask('file-streamer') @app.route("/uploadDumb", methods=["POST"]) def upload_dumb(): print("Hello") return Response(status=200) 所以基本上这个服务器应该只接收一个请求并返回一个响应 然后,我实现了一段简

我试图更准确地理解Http连接如何与Flask一起工作,因此我尝试编写一个非常简单的应用程序,以及另一个与请求和请求工具带的简单连接:

app = Flask('file-streamer')

@app.route("/uploadDumb", methods=["POST"])
def upload_dumb():
    print("Hello")
    return Response(status=200)
所以基本上这个服务器应该只接收一个请求并返回一个响应

然后,我实现了一段简单的代码,用toolbelt发送请求:

import requests 
from requests_toolbelt.multipart import encoder

values = {"file": ("test.zip", open("test.zip", "rb"), "application/zip"), "test": "hello"}

m = encoder.MultipartEncoder(fields=values)

r = requests.post(url="http://localhost:5000/uploadDumb", data=m, headers={"Content-Type": m.content_type})
我发送的文件是一个相当大的文件,我想通过流媒体上传。 问题是,我希望Flask服务器等待发送整个文件(即使文件没有用处),然后返回响应,但实际情况并非如此。 实际上,Flask在发送过程的一开始就响应,返回200响应,这导致“请求”端以“BrokenPipeError”结束


有人能给我解释一下那里发生了什么吗?

我不知道为什么管道会断开,但是我认为,如果没有流式传输,每个文件上载都会首先进入内存,因此如果您的服务器有256 MB,而您的一些客户机上载128 MB文件,那么您的内存很快就会耗尽,检查是否使用streams.Thansk接收Chuck以获取答案,但任何大于几千字节的文件都会出现问题。如果有帮助,我使用minimal django应用程序尝试了相同的方法,但一切正常,它会等待文件下载。我不确定为什么管道会断开,但是,如果不进行流式传输,则每个文件上载都会首先进入内存,因此如果您的服务器有256 MB,而您的一些客户端正在上载128 MB的文件,那么您的内存很快就会用完,请使用streams.Thansk检查是否接收到内存中的文件,以获取答案,但是任何大于几千字节的文件都会出现问题。如果可以的话,我用一个最小的django应用程序尝试了同样的方法,一切都很好,它会等待文件被下载。