sky*_*erl 80 python sockets connection errno
在我的Python套接字程序中,我有时需要用它来中断它Ctrl-C.当我这样做时,它会使用关闭连接socket.close()
.
但是,当我尝试重新打开它时,我必须等待一段时间才能再次连接.如何正确关闭套接字?或者这是打算?
Bar*_*osz 101
是的,它是有目的的.在这里你可以阅读详细的解释.可以通过在套接字上设置SO_REUSEADDR选项来覆盖此行为.例如:
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
Run Code Online (Sandbox Code Playgroud)
Moh*_*ara 27
发生这种情况是因为您尝试在同一端口运行服务并且已经有一个应用程序在运行。这可能是因为您的服务没有在进程堆栈中停止。你只需要杀死这些进程。
这里不需要安装任何东西,这是杀死所有正在运行的 python 进程的单行命令。
对于基于 Linux 的操作系统:
重击:
kill -9 $(ps -A | grep python | awk '{print $1}')
Run Code Online (Sandbox Code Playgroud)
鱼:
kill -9 (ps -A | grep python | awk '{print $1}')
Run Code Online (Sandbox Code Playgroud)
ayo*_*ziz 22
$ ps -fA | grep python
501 81211 12368 0 10:11PM ttys000 0:03.12
python -m SimpleHTTPServer
$ kill 81211
Run Code Online (Sandbox Code Playgroud)
dir*_*kk0 16
如果在SocketServer模块中使用TCPServer,UDPServer或其子类,则可以设置此类变量(在实例化服务器之前):
SocketServer.TCPServer.allow_reuse_address = True
Run Code Online (Sandbox Code Playgroud)
(通过SocketServer.ThreadingTCPServer - 程序重启后无法绑定到地址)
这会导致init(构造函数):
if self.allow_reuse_address:
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
Run Code Online (Sandbox Code Playgroud)
小智 11
对于Linux,
ps aux | grep python
这将向您显示错误。包含 python 文件的进程号(例如 35225)就是错误。
现在,
sudo kill -9 35225
这将终止错误进程,您的问题将得到解决。
在调用之前,除了使用此命令运行子进程外,对我没有任何作用HTTPServer(('', 443), myHandler)
:
kill -9 $(lsof -ti tcp:443)
Run Code Online (Sandbox Code Playgroud)
当然,这仅适用于类似 linux 的操作系统!
首先使用此命令找到python进程ID
ps -fA | grep python
Run Code Online (Sandbox Code Playgroud)
您将通过在第二列中命名您的 python 进程来获得 pid 号
然后使用此命令杀死进程
kill -9 pid
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
113702 次 |
最近记录: |