W moim programie używającym gniazd w Pythonie czasami muszę go przerwać za pomocą Ctrl-C. Kiedy to robię, zamyka połączenie za pomocą socket.close()
.
Jednak kiedy próbuję go ponownie otworzyć, muszę poczekać, co wydaje się minutę, zanim będę mógł ponownie się połączyć. Jak prawidłowo zamknąć gniazdo? Czy jest to zamierzone?
python
sockets
connection
errno
skylerl
źródło
źródło
$ ps -fA | grep python 501 81211 12368 0 10:11PM ttys000 0:03.12 python -m SimpleHTTPServer $ kill 81211
źródło
Jeśli używasz TCPServer, UDPServer lub ich podklas w module SocketServer, możesz ustawić tę zmienną klasy (przed uruchomieniem serwera):
SocketServer.TCPServer.allow_reuse_address = True
(przez SocketServer.ThreadingTCPServer - nie można powiązać z adresem po ponownym uruchomieniu programu )
Powoduje to, że init (konstruktor):
if self.allow_reuse_address: self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
źródło
ponieważ próbujesz uruchomić usługę w tym samym porcie, który już działa.
czasami zdarza się, ponieważ twoja usługa nie jest zatrzymana w stosie procesów. musisz ich zabić
nie trzeba tu niczego instalować , to jedno wierszowe polecenie, które zabije wszystkie uruchomione procesy Pythona.
dla systemu operacyjnego opartego na systemie Linux:
Grzmotnąć:
kill -9 $(ps -A | grep python | awk '{print $1}')
Ryba:
kill -9 (ps -A | grep python | awk '{print $1}')
źródło
Prostym rozwiązaniem, które zadziałało, jest zamknięcie terminala i ponowne uruchomienie.
źródło
Nic nie działało dla mnie poza uruchomieniem podprocesu za pomocą tego polecenia przed wywołaniem
HTTPServer(('', 443), myHandler)
:kill -9 $(lsof -ti tcp:443)
Oczywiście dotyczy to tylko systemu operacyjnego podobnego do linuxa!
źródło
Przede wszystkim znajdź identyfikator procesu Pythona za pomocą tego polecenia
Numer pid otrzymasz, nadając nazwę procesowi Pythona w drugiej kolumnie
Następnie zakończ proces za pomocą tego polecenia
kill -9 pid
źródło
Wystąpił ten sam błąd: Wykonane
kroki:
1 - używane
$ ps -fA | grep python
2 - Zabito cały proces
3 - Zamknięty terminal
4 - uruchomiono ponownie i uruchomiono aplikację (mkchromecast).
5 - nie otrzymałem tego komunikatu o błędzie.
Mam inny problem. kontynuowanie tego.
źródło
uruchom polecenie
przykład dla kolby:
fuser -k 5000/tcp
Pamiętaj też, że ten błąd pojawia się podczas wstawiania przez ctrl + z. więc aby zakończyć, użyj ctrl + c
źródło