web-dev-qa-db-ja.com

Flask app get "IOError:[Errno 32] Broken pipe"

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
_

どうして ?

助けてください、ありがとう。

18
Master Huang

組み込みのwerkzeugサーバーは、サーバーがコンテンツを送信している間、接続を閉じるリモートエンドを処理できません。

代わりにapp.run(debug=True,port=5000)

試す

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

またはnginxを使用している場合は、説明に従ってuwsgiで使用します here

それはむしろ私が主張するwerkzeug問題です

23
user2829759