因采用 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
windows(64位) flask 项目部署。 使用 mod_wsgi+apache
预编译完成的Apache mod_wsgi Flask 32bit安装模块,python3.6.5,用于支持flask的网站部署,使用pip install mod_wsgi-4.6.5+ap24vc14-cp36-cp36m-win32.whl安装即可
pallets werkzeug,flask的包含了实现非常好的LocalProxy、TypeConversionDict等
flask,Apache,mod_wsgi,db2 特别说明:mod_wsgi模块不用编译so
flask-wsgi-upload-server 适用于uWSGI和Flask的功能强大且安全的上传服务器。 依存关系: 如何启动服务器: uwsgi --ini /home/ran/uwsgi.ini 屏幕截图: 生成自己的PBKDF2凭据: 使用您的密码编辑derive_key...
烧瓶-宁静-wsgi 具有Apache mod_wsgi配置的示例flask_restful应用目的此存储库说明了使用mod_wsgi在Apache 2.4上部署flask_restful(Python Flask)应用程序的简化方法。 通常,这是对的更具体的阐述。 假设您有一个...
本文解决的是 Flask 最后一公里的问题:Linux 部署,需要的朋友可以参考下
采用flask构建的漫画阅读网站
该项目采用Flask框架开发,数据库采用mysql。该项目采用Flask框架开发的一个新闻、论坛、博客系统。。前端采用的是layui框架,后端模板是X-admin
基于谷歌Mediapipe框架设计的视力检测系统python源码(后端采用Flask,手势识别模型是自己重新训练的模型).zip基于谷歌Mediapipe框架设计的视力检测系统python源码(后端采用Flask,手势识别模型是自己重新训练的...
Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。...其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是 Flask 框架的核心。
pythonflask教程_Python3基础教程(⼆⼗)——flask介绍 基本概念 什么是Flask? Flask 是⼀个 web 框架。也就是说 Flask 为你提供⼯具,库和技术来允许你构建⼀个 web 应⽤程序。这个 web 应⽤程序可以是⼀些 web 页...
采用flask开发的博客系统,包含前端展示页面,后台文章编辑、评论审核、管理页面,.zip
Python优秀项目 基于Flask+TensorFlow+MyS的轴承故障诊断系统源码+部署文档+全部数据资料优秀项目.zip 1、代码压缩包内容 代码的项目文件 部署文档文件 2、代码运行版本 python3.7或者3.7以上的版本;若运行有误,...
其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。 Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具
Python3基础教程(⼆⼗) 基础教程(⼆⼗)——flask介绍 介绍 基本概念 基本概念 什么是 什么是Flask? Flask 是⼀个 web 框架。也就是说 Flask 为你提供⼯具,库和技术来允许你构建⼀个 web 应⽤程序。这个 web 应...
其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。在一般应用或个人开发中,可以很容易的写出应用。本篇就结合bootstrap,写一个简单的login界面。 一、效果图 无图无真像,先上效果图: flask-...
在Flask开发RESTful后端时,前端请求会遇到跨域的问题。下面是解决方法: 使用 flask-cors库可以很容易的解决 pip install flask-cors 两种方法,一个是全局/批量的,一个是单一独立的: 安全起见,一般来说使用...