sourcecode

Python [Errno 98] 주소가 이미 사용 중입니다.

copyscript 2023. 7. 18. 21:54
반응형

Python [Errno 98] 주소가 이미 사용 중입니다.

Python 소켓 프로그램에서 때때로 로 중단해야 합니다.이 작업을 수행하면 다음을 사용하여 연결이 닫힙니다.socket.close().

그러나 다시 열려고 하면 다시 연결하기 전에 몇 분 정도 기다려야 합니다.소켓을 올바르게 닫는 방법은 무엇입니까?아니면 이것이 의도된 것입니까?

네, 이것은 의도된 것입니다.여기서 자세한 설명을 읽을 수 있습니다.다음을 설정하여 이 동작을 재정의할 수 있습니다.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

이 문제는 동일한 포트에서 서비스를 실행하려고 하는데 이미 실행 중인 응용 프로그램이 있기 때문에 발생합니다.프로세스 스택에서 서비스가 중지되지 않았기 때문에 발생할 수 있습니다.당신은 그 과정들을 죽이면 됩니다.

실행 중인 모든 파이썬 프로세스를 제거하는 한 줄 명령어는 여기에 설치필요가 없습니다.

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를 통해)스레딩TCP Server - 프로그램 다시 시작 후 주소에 바인딩할 없음)

이로 인해 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)

물론 이것은 리눅스와 같은 OS에만 해당됩니다!

리눅스의 경우,

ps aux | grep python

오류가 표시됩니다.파이썬 파일이 포함된 프로세스 번호(예: 35225)가 오류입니다.

지금이다,

sudo kill -9 35225

이렇게 하면 오류 프로세스가 중지되고 문제가 해결됩니다.

먼저 이 명령을 사용하여 python 프로세스 ID를 찾습니다.

ps -fA | grep python

번째 열에 파이썬 프로세스의 이름을 지정하면 PID 번호를 얻을 수 있습니다.

그런 다음 이 명령을 사용하여 프로세스를 종료합니다.

kill -9 pid

명령을 실행합니다.

fuser -k (port_number_you_are _trying_to_access)/TCP

: 플스크의예라::fuser -k 5000/tcp

또한 이 오류는 ctrl+z로 인터셉트할 때 발생합니다.종료하려면 ctrl+c를 사용합니다.

저는 odoo 서버에서 유사한 오류에 직면했고 다음과 같은 간단한 단계로 해결했습니다.

  1. 터미널에 다음 코드를 붙여넣습니다.

    ps -fA | grep 파이썬

당신은 빠른 번호를 얻게 될 것입니다.이제 터미널 출력의 두 번째 열에서 pid 번호를 복사합니다.

  1. 그럼 아래와 같이 쓰세요.

    킬 -9 pid

터미널이 다시 시작되고 다음 명령이 실행됩니다.

flask run

잘 될 거예요!감사해요.

몇 분만 기다리면 해결됩니다.일부 프로세스의 종료 속도가 느리기 때문에 실행 중인 프로세스 목록에도 표시되지 않습니다.

Tesla Wall Connector용 EV 충전 관리자용 파이썬을 실행하는 라즈베리 파이에서도 동일한 문제(Err98 주소가 이미 사용 중)가 발생했습니다.소프트웨어는 이전에는 괜찮았지만 어느 날 솔라 인버터에 대한 질문을 중단했고 저는 그것이 파이썬에서 했던 일이라고 생각하며 며칠을 보냈습니다.근본적인 원인은 집에 새로운 스마트 TV를 도입한 결과 와이파이 모뎀이 태양광 인버터에 새로운 동적 IP를 할당했기 때문인 것으로 밝혀졌습니다.와이파이 모뎀과 빙고에서 찾은 새로운 IP 주소를 반영하기 위해 파이썬 코드를 변경했는데, 문제가 해결되었습니다.

토니를 통해 피코W를 프로그래밍하는 동안 코드를 실행한 후 이 오류가 발생했습니다.명령줄에서 socket.reset()을 수행하여 문제를 해결합니다.

>>> socket.reset()

소켓을 즉시 재사용할 수 있도록 하는 가장 깨끗한 방법은 먼저 연결의 클라이언트 끝(소켓)을 종료하고 필요한 경우 예외 처리를 통해 서버 끝이 마지막으로 종료되도록 하는 권장 사항을 따르는 것입니다.

이는 서버 종료가 영구적으로 실행됨을 의미할 수 있습니다.

"영원히" 루프가 실행을 일시 중지하는 경우(예: 소켓에서 읽기)에는 문제가 없습니다.

"영원히" 루프를 "끊는" 방법은 클라이언트가 없는 한 서버 관리자로서 결정됩니다(명백한 시스템 수준 예외는 제외).

문제를 해결하기 위해 다음 코드를 시도했습니다.

sudo lsof -t -i tcp:8000 | xargs kill -9

sudopkill -9 비단뱀

이 명령어를 사용해 보십시오.

언급URL : https://stackoverflow.com/questions/4465959/python-errno-98-address-already-in-use

반응형