123

私のPythonソケットプログラムでは、時々それをで中断する必要がありCtrl-Cます。これを行うと、を使用して接続が閉じられsocket.close()ます。

ただし、再度開く場合は、1分ほど待ってから再度接続する必要があります。ソケットを正しく閉じるにはどうすればよいですか?それともこれは意図されたものですか?

4

13 に答える 13

143

はい、それは意図されています。ここで詳細な説明を読むことができます。ソケットにSO_REUSEADDRオプションを設定することにより、この動作をオーバーライドすることができます。例えば:

sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
于 2010-12-16T22:33:22.843 に答える
46
$ ps -fA | grep python
501 81211 12368   0  10:11PM ttys000    0:03.12  
python -m SimpleHTTPServer

$ kill 81211
于 2016-06-13T13:58:26.460 に答える
34

これは、同じポートでサービスを実行しようとしていて、すでに実行中のアプリケーションがあるために発生します。これは、サービスがプロセススタックで停止されていないために発生する可能性があります。それらのプロセスを強制終了する必要があります。

ここに何もインストールする必要はありません。実行中のすべてのPythonプロセスを強制終了する1行のコマンドです。

LinuxベースのOSの場合:

バッシュ:

kill -9 $(ps -A | grep python | awk '{print $1}')

魚:

kill -9 (ps -A | grep python | awk '{print $1}')
于 2019-01-25T09:57:57.603 に答える
26

TCPServerモジュールで、UDPServerまたはそのサブクラスを使用する場合は、 socketserver(サーバーをインスタンス化する前に)このクラス変数を設定できます。

socketserver.TCPServer.allow_reuse_address = True

( SocketServer.ThreadingTCPServer経由-プログラムの再起動後にアドレスにバインドできません)

これにより、init(コンストラクター)は次のようになります。

 if self.allow_reuse_address:
     self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
于 2014-08-27T14:17:40.163 に答える
12

私のために働いた簡単な解決策は、ターミナルを閉じて再起動することです。

于 2018-07-15T11:57:09.577 に答える
11

呼び出す前に、このコマンドでサブプロセスを実行する以外は何も機能しませんでしたHTTPServer(('', 443), myHandler)

kill -9 $(lsof -ti tcp:443)

もちろん、これはLinuxのようなOS専用です!

于 2017-05-22T10:50:16.437 に答える
7

まず、このコマンドを使用してPythonプロセスIDを見つけます

ps -fA | grep python

2番目の列でPythonプロセスに名前を付けると、pid番号が取得されます

次に、このコマンドを使用してプロセスを強制終了します

kill -9 pid
于 2020-04-28T11:27:10.600 に答える
2

コマンドを実行します

fuser -k (port_number_you_are _trying_to_access)/TCP

フラスコの例: fuser -k 5000/tcp

また、このエラーはctrl+zでインタープリートしたときに発生することを覚えておいてください。したがって、終了するにはctrl+cを使用します

于 2020-03-04T12:39:33.570 に答える
1

Linuxの場合、

ps aux | grep python

これにより、エラーが表示されます。Pythonファイルを含むプロセス番号(例:35225)がエラーです。

今、

sudo kill -9 35225

これによりエラープロセスが強制終了され、問題が解決されます。

于 2021-10-28T15:25:55.750 に答える
0

Tesla WallConnectorのEV充電マネージャー用にPythonを実行しているRaspberryPiで同じ問題が発生しました(Err98アドレスはすでに使用されています)。ソフトウェアは以前は問題ありませんでしたが、ある日ソーラーインバーターへの問い合わせを停止し、Pythonでやったことだと思って何日も過ごしました。根本的な原因は、新しいスマートTVを自宅に導入した結果、Wifiモデムがソーラーインバーターに新しい動的IPを割り当てたことであることが判明しました。Wi-Fiモデムとビンゴから見つけた新しいIPアドレスを反映するようにPythonコードを変更しましたが、問題は修正されました。

于 2021-05-31T22:50:30.490 に答える
0

私はodooサーバーで同様のエラーに直面し、次の簡単な手順でそれを解決しました。

  1. ターミナルに次のコードを貼り付けます

    ps -fA | grep python

pid番号を取得します。次に、端末出力の2番目の列からpid番号をコピーします。

  1. 次に、以下のように書きます

    -9pidを殺す

ターミナルが再起動し、コマンド

flask run

うまくいきます!ありがとうございました

于 2021-06-02T06:37:58.627 に答える
0

数分待つだけで何もしないでください。解決されます。一部のプロセスの終了が遅いために発生します。そのため、実行中のプロセスのリストにも表示されません。

于 2021-11-13T11:22:12.897 に答える
-2

sudo pkill -9 python

このコマンドを試してください

于 2021-05-27T12:17:43.603 に答える