私の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
SocketServerモジュールでTCPServer、UDPServer、またはそれらのサブクラスを使用する場合、(サーバーをインスタンス化する前に)このクラス変数を設定できます。
SocketServer.TCPServer.allow_reuse_address = True
(SocketServer.ThreadingTCPServer経由-プログラムの再起動後にアドレスにバインドできません)
これにより、init(コンストラクタ)は次のことを行います。
if self.allow_reuse_address:
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
すでに実行されているのと同じポートでサービスを実行しようとしているためです。
サービスがプロセススタックで停止していないために、いつか発生します。あなたはそれらを殺さなければなりません
ここに何もインストールする必要はありませんが、実行中のすべてのPythonプロセスを強制終了する1行のコマンドです。
LinuxベースのOSの場合:
バッシュ:
kill -9 $(ps -A | grep python | awk '{print $1}')
魚:
kill -9 (ps -A | grep python | awk '{print $1}')
まず、このコマンドを使用してpythonプロセスIDを見つけます
ps -fA | grep python
あなたは2列目に Pythonプロセスの名前を付けることによってpid番号を取得します
次に、このコマンドを使用してプロセスを強制終了します
kill -9 pid
同じエラーが発生しました:
手順:
1-使用済み$ ps -fA | grep python
2-すべてのプロセスを終了しました
3-ターミナルを閉じました
4-アプリケーションを再起動して起動しました(mkchromecast)。
5-このエラーメッセージは表示されませんでした。
別の問題が発生しました。フォローアップします。