流较大响应时的uWSGI错误(SIGPIPE)

时间:2018-10-14 12:17:27

标签: python http flask uwsgi gevent

我在使用uWSGI传输大型gzip响应时遇到问题。 我的应用是在带有Python插件的uwsgi服务器后面运行Flask / gevent的Python。

我正在使用以下命令来运行服务器: uwsgi -L --http :80 --plugin python --wsgi-file main.py --callable app --processes 4

根据特定的GET请求,服务器开始向客户端流式传输 Content-Type: application/zip Transfer-Encoding: chunked

虽然某些请求可以正常工作,并且文件已下载到客户端,但是某些请求在客户端出现“网络错误”。在服务器上,我可以看到以下错误: SIGPIPE: writing to a closed pipe/socket/fd

我已经尝试设置更长的超时时间,在Unix端口(而不是HTTP)上运行python桥以及其他一些调整。似乎没有什么能解决这个问题。 在下载流时,我可以看到数据总是在传输,它在任何时候都不会挂起或卡住,并且错误在没有任何数据流更改的情况下突然发生。同样,同一文件下载在不同时间会失败-100MB后可能会失败,而350MB下载后可能会在一分钟后失败。

1 个答案:

答案 0 :(得分:0)

您真的应该考虑将websocket用于这种类型的流式传输。优点是它们易于设置,异步并且可以更好地处理网络延迟。

https://blog.miguelgrinberg.com/post/easy-websockets-with-flask-and-gevent