需要关闭Python套接字 / 在开发环境中查找当前运行的服务器

23 投票
3 回答
26021 浏览
提问于 2025-04-17 03:59

我正在学习Python(使用Flask这个小框架),但是我有点困惑,因为我觉得我的代码里有地方让服务器一直保持开启。

我用'python app.py'启动了服务器,然后关闭它,然而……它还是活着!

我不太明白这是怎么回事,但我肯定是在哪个连接上搞错了。

这里其实有两个问题。

第一个:我怎么找到活跃的连接/套接字并把它关闭?

第二个:有没有办法让我诊断一下是什么东西保持着开放连接,我猜可能是sqlLite没有关闭,因为这是我最后实现的功能。

这是一个单文件的应用(除了配置文件和静态内容),所以如果需要的话我可以贴出代码。

生成的错误(文件夹位置已更改):

/Development/flask_projects/test_email/env/bin/python /Development/flask_projects/test_email/app.py
 * Running on http://127.0.0.1:5000/
Traceback (most recent call last):
  File "Development/flask_projects/test_email/app.py", line 58, in <module>
    app.run()
  File "Development/flask_projects/wtchn_email/env/lib/python2.7/site-packages/Flask-0.8-py2.7.egg/flask/app.py", line 703, in run
    run_simple(host, port, self, **options)
  File "/Library/Python/2.7/site-packages/Werkzeug-0.7.1-py2.7.egg/werkzeug/serving.py", line 612, in run_simple
    test_socket.bind((hostname, port))
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 48] Address already in use

3 个回答

7

你可能是用 Ctrl-Z 来关闭服务器。如果是这样的话,试试用 Ctrl-C 来关闭吧。

10

要结束一个正在监听5000端口的Python进程,可以使用以下命令:

sudo lsof -i :5000 | grep "python" | cut -d " " -f3 | xargs kill -9

82

如果你在使用Linux系统,可以用lsof这个工具来查找哪个程序正在使用某个端口。不过你可能需要先安装它,使用起来其实很简单:

lsof -i :5000

撰写回答