153

現在、私はpythonで構築されたアプリを使用しています。パソコンで実行すると問題なく動作します。

ただし、本番サーバーに移動すると。以下のように添付されたエラーが表示され続けます。

いくつかの調査を行ったところ、サーバーがまだデータを送信している間にエンドユーザーのブラウザーが接続を停止する理由がわかりました。

私のパソコンでは動作しているのに、なぜそれが起こったのか、本番サーバーでは正常に動作しない根本的な原因は何なのか疑問に思っています。どんなアドバイスでも大歓迎です

    Exception happened during processing of request from ('127.0.0.1', 34226)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 284, in
_handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 310, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", line 641, in __init__
    self.finish()
  File "/usr/lib/python2.7/SocketServer.py", line 694, in finish
    self.wfile.flush()
  File "/usr/lib/python2.7/socket.py", line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
4

5 に答える 5

105

サーバー プロセスがSIGPIPEソケットへの書き込みを受け取りました。これは通常、反対側 (クライアント) 側で完全に閉じられたソケットに書き込むときに発生します。これは、クライアント プログラムがサーバーからのすべてのデータを受信するまで待機せず、(close関数を使用して) ソケットを閉じるだけである場合に発生する可能性があります。

C プログラムでは、通常、シグナルを無視するように設定するSIGPIPEか、ダミーのシグナル ハンドラを設定します。この場合、閉じたソケットへの書き込み時に単純なエラーが返されます。あなたの場合、Pythonは、クライアントの早期切断として処理できる例外をスローするようです。

于 2012-08-08T14:40:08.340 に答える
15

パイプの破損エラーは通常、リクエストがブロックされているか、時間がかかりすぎている場合に発生し、リクエスト側のタイムアウト後に接続が閉じられ、応答側 (サーバー) がソケットに書き込もうとすると、パイプ破損エラー。

于 2015-01-20T08:12:35.647 に答える
9

それは、どのようにテストしたかによって異なります。また、おそらく、パーソナル コンピューターとサーバーの TCP スタックの実装の違いによって異なります。

たとえば、sendallパソコンで常にすぐに (または非常に速く) 完了する場合、送信中に接続が切断されたことはありません。これは、ブラウザーが同じマシンで実行されている場合に発生する可能性が非常に高くなります (実際のネットワーク遅延がないため)。


一般に、終了する前にクライアントが切断された場合は、例外を処理することで処理する必要があります。

TCP 通信は非同期であることに注意してください。ただし、これはローカル接続よりも物理的にリモート接続の方がはるかに明白であるため、このような状況をローカル ワークステーションで再現するのは難しい場合があります。具体的には、1 台のマシンでのループバック接続は、多くの場合、ほぼ同期しています。

于 2012-08-08T14:39:47.000 に答える
1

If it's a python a web application or service such as Flask or FastAPI, this error might occur if the production server is configured to timeout a request that takes too long. There are relevant parameters in Gunicorn and Uvicorn such as GRACEFUL_TIMEOUT and TIMEOUT that need to be configured according to the needs of your application. You may also want to check your reverse proxy or gateway timeout thresholds.

于 2021-06-22T19:36:31.827 に答える