在我的Python套接字程序中,我有时需要使用 Ctrl-C 来中断它。当我这样做时,它会使用socket.close()
关闭连接。
但是,当我尝试重新打开它时,我必须等待一段时间才能再次连接。如何正确关闭套接字?或者是这个意图吗?
答案 0 :(得分:97)
是的,这是有目的的。在这里,您可以阅读detailed explanation。可以通过在套接字上设置SO_REUSEADDR选项来覆盖此行为。例如:
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
答案 1 :(得分:22)
$ ps -fA | grep python
501 81211 12368 0 10:11PM ttys000 0:03.12
python -m SimpleHTTPServer
$ kill 81211
答案 2 :(得分:15)
如果在SocketServer模块中使用TCPServer,UDPServer或其子类,则可以设置此类变量(在实例化服务器之前):
SocketServer.TCPServer.allow_reuse_address = True
(通过SocketServer.ThreadingTCPServer - Cannot bind to address after program restart)
这会导致 init (构造函数):
if self.allow_reuse_address:
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
答案 3 :(得分:3)
一个对我有用的简单解决方案是关闭终端,然后重新启动。
答案 4 :(得分:3)
首先使用此命令找到python进程ID
ps -fA | grep python
通过在第二列
上命名python进程,您将获得一个pid编号然后使用此命令终止进程
kill -9 pid
答案 5 :(得分:2)
在调用HTTPServer(('',443),myHandler)之前,除了使用此命令运行子进程外,没有什么比这更有用了:
kill -9 $(lsof -ti tcp:443)
当然这只适用于类似Linux的操作系统!
答案 6 :(得分:1)
因为您尝试在已经运行的同一端口中运行服务。
之所以会发生,是因为您的服务没有在进程堆栈中停止。你必须杀死他们
这是一条用于杀死所有正在运行的python进程的命令。
对于基于Linux的操作系统:
kill -9 (ps -A | grep python | awk '{print $1}')
答案 7 :(得分:1)
运行命令
fuser -k (port_number_you_are _trying_to_access)/TCP
烧瓶的示例:fuser -k 5000/tcp
此外,请记住当您通过ctrl + z进行插入时会出现此错误。所以要终止使用ctrl + c
答案 8 :(得分:0)
出现相同的错误:
遵循的步骤:
1-二手$ ps -fA | grep python
2-杀死了所有进程
3-封闭端子
4-释放并启动了该应用程序(mkchromecast)。
5-没有收到此错误消息。
有另一个问题。
跟进。
答案 9 :(得分:0)
我在运行 python 的 Raspberry Pi 上遇到了同样的问题(Err98 地址已在使用),用于特斯拉壁式连接器的 EV 充电管理器。该软件以前一直很好,但有一天它停止询问太阳能逆变器,我花了几天时间认为这是我在 python 中完成的事情。事实证明,根本原因是 Wifi 调制解调器为太阳能逆变器分配了一个新的动态 IP,这是我家中引入新智能电视的结果。我更改了 python 代码以反映我从 wifi 调制解调器和宾果游戏中找到的新 IP 地址,问题已解决。
答案 10 :(得分:0)
我在 odoo 服务器上遇到了类似的错误,并通过以下简单的步骤解决了这个问题:
在终端粘贴以下代码
ps -fA |蟒蛇
你会得到一个pid号。现在从终端输出的第二列复制pid号。
然后写成如下
kill -9 pid
终端将重新启动然后命令
flask run
会正常工作! 谢谢
答案 11 :(得分:-2)
sudo pkill -9 蟒蛇
试试这个命令