私のPythonソケットプログラムでは、時々それをで中断する必要がありCtrl-Cます。これを行うと、を使用して接続が閉じられsocket.close()
ます。
ただし、再度開く場合は、1分ほど待ってから再度接続する必要があります。ソケットを正しく閉じるにはどうすればよいですか?それともこれは意図されたものですか?
私のPythonソケットプログラムでは、時々それをで中断する必要がありCtrl-Cます。これを行うと、を使用して接続が閉じられsocket.close()
ます。
ただし、再度開く場合は、1分ほど待ってから再度接続する必要があります。ソケットを正しく閉じるにはどうすればよいですか?それともこれは意図されたものですか?
はい、それは意図されています。ここで詳細な説明を読むことができます。ソケットにSO_REUSEADDRオプションを設定することにより、この動作をオーバーライドすることができます。例えば:
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
$ ps -fA | grep python
501 81211 12368 0 10:11PM ttys000 0:03.12
python -m SimpleHTTPServer
$ kill 81211
これは、同じポートでサービスを実行しようとしていて、すでに実行中のアプリケーションがあるために発生します。これは、サービスがプロセススタックで停止されていないために発生する可能性があります。それらのプロセスを強制終了する必要があります。
ここに何もインストールする必要はありません。実行中のすべてのPythonプロセスを強制終了する1行のコマンドです。
LinuxベースのOSの場合:
バッシュ:
kill -9 $(ps -A | grep python | awk '{print $1}')
魚:
kill -9 (ps -A | grep python | awk '{print $1}')
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)
私のために働いた簡単な解決策は、ターミナルを閉じて再起動することです。
呼び出す前に、このコマンドでサブプロセスを実行する以外は何も機能しませんでしたHTTPServer(('', 443), myHandler)
:
kill -9 $(lsof -ti tcp:443)
もちろん、これはLinuxのようなOS専用です!
まず、このコマンドを使用してPythonプロセスIDを見つけます
ps -fA | grep python
2番目の列でPythonプロセスに名前を付けると、pid番号が取得されます
次に、このコマンドを使用してプロセスを強制終了します
kill -9 pid
コマンドを実行します
fuser -k (port_number_you_are _trying_to_access)/TCP
フラスコの例: fuser -k 5000/tcp
また、このエラーはctrl+zでインタープリートしたときに発生することを覚えておいてください。したがって、終了するにはctrl+cを使用します
Linuxの場合、
ps aux | grep python
これにより、エラーが表示されます。Pythonファイルを含むプロセス番号(例:35225)がエラーです。
今、
sudo kill -9 35225
これによりエラープロセスが強制終了され、問題が解決されます。
Tesla WallConnectorのEV充電マネージャー用にPythonを実行しているRaspberryPiで同じ問題が発生しました(Err98アドレスはすでに使用されています)。ソフトウェアは以前は問題ありませんでしたが、ある日ソーラーインバーターへの問い合わせを停止し、Pythonでやったことだと思って何日も過ごしました。根本的な原因は、新しいスマートTVを自宅に導入した結果、Wifiモデムがソーラーインバーターに新しい動的IPを割り当てたことであることが判明しました。Wi-Fiモデムとビンゴから見つけた新しいIPアドレスを反映するようにPythonコードを変更しましたが、問題は修正されました。
私はodooサーバーで同様のエラーに直面し、次の簡単な手順でそれを解決しました。
ターミナルに次のコードを貼り付けます
ps -fA | grep python
pid番号を取得します。次に、端末出力の2番目の列からpid番号をコピーします。
次に、以下のように書きます
-9pidを殺す
ターミナルが再起動し、コマンド
flask run
うまくいきます!ありがとうございました
数分待つだけで何もしないでください。解決されます。一部のプロセスの終了が遅いために発生します。そのため、実行中のプロセスのリストにも表示されません。
sudo pkill -9 python
このコマンドを試してください