8

次のような単純なフラスコアプリを実行します。

from flask import Flask

app = Flask(__name__) 

@app.route('/')
def welcome():
    return "OK"


app.config.update(
    DEBUG = True
)

if __name__ == '__main__':
    app.run(use_reloader = False)

私がそれを実行して訪問すると、時々(常にではありませんが)リクエストに応答できず、例外がスローされます:

Exception happened during processing of request from ('127.0.0.1', 54481)
Traceback (most recent call last):
  File "c:\python27\Lib\SocketServer.py", line 295, in _handle_request_noblock
    self.process_request(request, client_address)
  File "c:\python27\Lib\SocketServer.py", line 321, in process_request
    self.finish_request(request, client_address)
  File "c:\python27\Lib\SocketServer.py", line 334, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "c:\python27\Lib\SocketServer.py", line 651, in __init__
    self.finish()
  File "c:\python27\Lib\SocketServer.py", line 710, in finish
    self.wfile.close()
  File "c:\python27\Lib\socket.py", line 279, in close
    self.flush()
  File "c:\python27\Lib\socket.py", line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 10053]

この障害の原因がわかりませんか?どうすれば解決できますか?

どうすればtry exceptそれをキャッチできますか?

4

3 に答える 3

0

この解決策は、少なくとも一時的な修正であることがわかりました。

if __name__ == '__main__':
  while True:
    try:
       app.run(use_reloader = False)
    except:
      pass

独自の終了ロジックを追加するか、SIGQUIT を送信する CTRL + \ でプログラムを終了できます。(スレッドフラスコを実行している場合は重要です)

ただし、次のことはできません。

   except KeyboardInterupt:

Flask はすでに KeyboardInterupt 例外をキャッチして処理しているためです。

エラー 10052 は Windows を使用していることを意味するので、私の知る限り、コマンド ウィンドウを閉じてプログラムを終了してください

于 2016-09-21T00:12:48.487 に答える