Flask应用程序出现“IOError:[Errno 32] Broken pipe”错误

19

现在我使用Flask来开发Web应用程序。

但是最初它运行良好,经过一段时间的操作Web页面后,Flask后端出现以下错误:

   File "/usr/lib64/python2.6/BaseHTTPServer.py", line 329, in handle
    self.handle_one_request()
  File "/usr/lib/python2.6/site-packages/werkzeug/serving.py", line 251, in handle_one_request
    return self.run_wsgi()
  File "/usr/lib/python2.6/site-packages/werkzeug/serving.py", line 193, in run_wsgi
    execute(self.server.app)
  File "/usr/lib/python2.6/site-packages/werkzeug/serving.py", line 184, in execute
    write(data)
  File "/usr/lib/python2.6/site-packages/werkzeug/serving.py", line 152, in write
    self.send_header(key, value)
  File "/usr/lib64/python2.6/BaseHTTPServer.py", line 390, in send_header
    self.wfile.write("%s: %s\r\n" % (keyword, value))
IOError: [Errno 32] Broken pipe

我的应用程序在5000端口上运行app.run(debug=True,port=5000)

我使用nginx作为Web服务器,并在nginx配置文件中设置了proxy_pass http://127.0.0.1:5000

现在我真的不知道哪里出错了,我使用了session ['email'] = request.form ['email'],在其他文件中我使用了email = session.get('email')

这种用法正确吗?如何设置会话的有效期?

还是其他原因导致了这个错误?

然后我设置了app.run(debug=False,port=5000),它显示了新的错误

File "/usr/lib64/python2.6/SocketServer.py", line 671, in finish
    self.wfile.flush()
  File "/usr/lib64/python2.6/socket.py", line 303, in flush
    self._sock.sendall(buffer(data, write_offset, buffer_size))
socket.error: [Errno 32] Broken pipe

为什么?

请帮帮我,谢谢。


"eamil" 和 "email",是打字错误吗? - hjpotter92
我不会在生产环境中使用werkzeug服务器,而是使用gunicorn、nginx uwsgi或其他类似的工具。 - syntonym
我拼错了,看起来不是这个原因。 - Master Huang
看起来我也遇到了同样的问题:文件 "/usr/lib/python2.7/BaseHTTPServer.py",第401行,send_header方法 self.wfile.write("%s: %s\r\n" % (keyword, value)) IOError: [Errno 32] Broken pipe。我使用以下要求: Babel == 2.3.4 blinker == 1.4 click == 6.6 Flask == 0.11.1 Flask-Babel == 0.11.1 Flask-Mail == 0.9.1 Flask-WTF == 0.12 itsdangerous == 0.24 Jinja2 == 2.8 MarkupSafe == 0.23 pytz == 2016.4 speaklater == 1.3 Werkzeug == 0.11.10 WTForms == 2.1 - user3576508
1个回答

23

内置的werkzeug服务器无法处理在服务器仍在输出其内容时远程终端关闭连接的情况。

尝试使用app.run(debug=True,port=5000)代替。

请尝试:

from gevent.wsgi import WSGIServer
http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()

或者如果你正在使用nginx,则可以按照这里的说明将其与uwsgi一起使用。

我认为这更多是一个werkzeug的问题。


Werkzeug对我来说也引起了相同的错误。转换到gunicorn帮助了我很多。http://www.onurguzel.com/how-to-run-flask-applications-with-nginx-using-gunicorn/ - JJFord3
1
这个非常好用。感谢您的发布。有关这些WSGI连接和替代方案的更多信息在这里:http://flask.pocoo.org/docs/0.12/deploying/wsgi-standalone/ - phyatt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接