因采用 Flask 原生 WSGI 出现 "Broken pipe" 报错的故障处理
转自 https://www.cnblogs.com/autopenguin/p/6704027.html
Flask 出现 "Broken pipe" 现象说明:
采用 Flask 原生 WSGI 发布 Web(app.run())。随后,发起一个 Request,在 Request 还未返回前停止查询,并重新发起一个新的 Request。服务端很可能出现类似如下的"Broken pipe"报错。
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usrb64/python2.7/threading.py", line 811, in __bootstrap_inner
self.run()
File "/usrb64/python2.7/threading.py", line 764, in run
self.__target(*self.__args, **self.__kwargs)
File "/usrb/python2.7/site-packages/werkzeugrving.py", line 659, in inner
srv.serve_forever()
File "/usrb/python2.7/site-packages/werkzeugrving.py", line 499, in serve_forever
HTTPServer.serve_forever(self)
File "/usrb64/python2.7/SocketServer.py", line 238, in serve_forever
self._handle_request_noblock()
File "/usrb64/python2.7/SocketServer.py", line 297, in _handle_request_noblock
self.handle_error(request, client_address)
File "/usrb64/python2.7/SocketServer.py", line 295, in _handle_request_noblock
self.process_request(request, client_address)
File "/usrb64/python2.7/SocketServer.py", line 321, in process_request
self.finish_request(request, client_address)
File "/usrb64/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usrb64/python2.7/SocketServer.py", line 649, in __init__
self.handle()
File "/usrb/python2.7/site-packages/werkzeugrving.py", line 216, in handle
rv = BaseHTTPRequestHandler.handle(self)
File "/usrb64/python2.7/BaseHTTPServer.py", line 340, in handle
self.handle_one_request()
File "/usrb/python2.7/site-packages/werkzeugrving.py", line 251, in handle_one_request
return self.run_wsgi()
File "/usrb/python2.7/site-packages/werkzeugrving.py", line 193, in run_wsgi
execute(self.server.app)
File "/usrb/python2.7/site-packages/werkzeugrving.py", line 184, in execute
write(data)
File "/usrb/python2.7/site-packages/werkzeugrving.py", line 152, in write
self.send_header(key, value)
File "/usrb64/python2.7/BaseHTTPServer.py", line 401, in send_header
self.wfile.write("%s: %s\r\n" % (keyword, value))
IOError: [Errno 32] Broken pipe
"Broken pipe" 报错原因:<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
"Broken pipe" 的字面意思为 "管道破裂",本质为写入端反馈时读端却关闭,因而造成没有及时取走管道中的数据,从而引发程序异常。
"Broken pipe" 报错处理方式:
放弃对 Flask 原生 WSGI 的使用,转而使用全功能的 WSGI,例如:gunicorn、uWSGI 等。
多种 WSGI 对引发 "Broken pip" 报错操作的响应对比:
1.Flask 原生 WSGI
采用 Flask 原生 WSGI 的最简测试程序如下。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
import time
time.sleep(10)
return 'Hello World'
app.run(host='11.4.76.73', port=6001)
调用方式如下。
# ./env/bin/python flasktest.py
当发起一个 Request,在 Request 还未返回前停止查询,并重新发起一个新的 Request时,WSGI 响应类似如下。
注意:报错"Broken pipe",程序崩溃。
2.gunicorn
采用 gunicorn 的最简测试程序如下。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
import time
time.sleep(10)
return 'Hello World'
调用方式如下。
# ./env/bin/gunicorn -w 1 --log-level 'debug' -b 11.4.76.73:6002 gunicorntest:app
当发起一个 Request,在 Request 还未返回前停止查询,并重新发起一个新的 Request时,WSGI 响应类似如下。
注意:出现"Ignoring connection reset"信息,但不影响应用运行。
3.pywsgi
采用 pywsgi 的最简测试程序如下。
from gevent import monkey
monkey.patch_all()
from flask import Flask
from gevent import pywsgi
app = Flask(__name__)
@app.route('/')
def index():
import time
time.sleep(10)
return 'Hello World'
server = pywsgi.WSGIServer(('11.4.76.73', 6003), app)
server.serve_forever()
调用方式如下。
# ./env/bin/python geventtest.py
当发起一个 Request,在 Request 还未返回前停止查询,并重新发起一个新的 Request时,WSGI 响应类似如下。
注意:应用正常。
相关推荐
windows下使用flask+wsgi+Apache部署python web, 博客地址 https://blog.csdn.net/Albert201605/article/details/115429256
werkzeug是Pallets项目中的一个核心库,它是一个强大的WSGI工具集,广泛用于Python Web开发,特别是与Flask框架结合使用。在Flask中,werkzeug提供了许多实用的功能和类,包括LocalProxy和TypeConversionDict。让...
Windows 下 Python Flask+Apache+mod_wsgi+DB2 部署 本文档旨在指导用户在 Windows 平台上部署 Python Flask 项目,使用 Apache 作为 Web 服务器,mod_wsgi 作为 WSGI 服务器,DB2 作为数据库管理系统。 一、...
预编译完成的Apache mod_wsgi Flask 32bit安装模块,python3.6.5,用于支持flask的网站部署,使用pip install mod_wsgi-4.6.5+ap24vc14-cp36-cp36m-win32.whl安装即可
烧瓶-宁静-wsgi 具有Apache mod_wsgi配置的示例flask_restful应用目的此存储库说明了使用mod_wsgi在Apache 2.4上部署flask_restful(Python Flask)应用程序的简化方法。 通常,这是对的更具体的阐述。 假设您有一个...
flask-wsgi-upload-server 适用于uWSGI和Flask的功能强大且安全的上传服务器。 依存关系: 如何启动服务器: uwsgi --ini /home/ran/uwsgi.ini 屏幕截图: 生成自己的PBKDF2凭据: 使用您的密码编辑derive_key...
Web程序开发课程设计,前端采用Vue3+TypeScript+Element-Plus,后端采用Flask框架,数据库使用MySQL。Web程序开发课程设计,前端采用Vue3+TypeScript+Element-Plus,后端采用Flask框架,数据库使用MySQL。Web程序...
在这个项目中,“采用Flask框架开发,该项目采用Flask框架开发的一个新闻、论坛、博客系统.zip”,我们可以看出项目的核心就是利用Flask构建了一个集新闻、论坛和博客功能于一体的Web应用。 1. **Flask基础知识** ...
在本文中,我们将探讨如何在阿里云Ubuntu 1.4服务器上部署Flask应用程序,利用uWSGI作为应用服务器,以及Nginx作为反向代理服务器。这个组合提供了高效且稳定的生产环境。 首先,确保你已经通过SSH连接到阿里云...
在Web开发领域,Python的Flask框架因其轻量级、灵活性和强大的功能而备受青睐。本项目“采用flask开发的博客系统”便是一个利用Flask构建的全功能博客平台,它涵盖了前端展示、后台管理以及用户互动的诸多环节。本文...
标题中的“基于谷歌Mediapipe框架设计的视力检测系统后端采用Flask源码”表明这是一个使用Mediapipe和Flask构建的视力检测应用的后端代码库。Mediapipe是谷歌开发的一个开源跨平台解决方案,主要用于处理多媒体数据...
基于谷歌Mediapipe框架设计的视力检测系统python源码(后端采用Flask,手势识别模型是自己重新训练的模型).zip基于谷歌Mediapipe框架设计的视力检测系统python源码(后端采用Flask,手势识别模型是自己重新训练的...
**Python-采用Flask构建的漫画阅读网站** Flask是一个轻量级的Web服务程序框架,它是用Python编写的,适合构建小型到中等规模的Web应用,包括内容管理系统(CMS)。在这个项目中,我们将深入探讨如何利用Flask来...
Flask的强大之处在于其丰富的扩展生态系统,如SQLAlchemy(ORM)、Flask-SQLAlchemy(简化SQLAlchemy的使用)、Flask-WTF(表单处理)、Flask-Mail(邮件发送)等。这些扩展让Flask能够轻松应对复杂项目的需求。 **...
2. **mod_wsgi**: Apache的一个扩展模块,用于处理Python WSGI应用。 3. **Python环境**: 包括Python解释器及所需的库。 4. **Flask框架**: 一种轻量级的Web应用框架。 #### 三、安装Apache 2.4 1. **下载Apache**...
部署 Flask 应用可以采用多种方式,如使用 Gunicorn 或 uWSGI 作为 WSGI 服务器,Nginx 作为反向代理,还可以使用 Fabric 或 Docker 进行自动化部署。 **错误处理与调试** Flask 允许自定义错误页面,并提供了内置...
4. **请求和响应**:Flask处理HTTP请求,通过`request`对象可以获取请求参数,如GET、POST数据。而`make_response`函数则用于构建响应对象,可设置响应状态码、头部信息和响应体。 5. **错误处理**:使用`@app....
Flask社区提供了大量的扩展,涵盖数据库集成、表单验证、上传处理、开放认证等多种技术,这使得Flask的应用范围可以非常广泛。 配置与惯例在Flask中也非常明确。例如,按照惯例,模板通常存储在名为templates的子...