我有这个代码(hello.py):
import os,sys
import tornado.ioloop
import tornado.web
import tornado.httpserver
#http server class
class http_server(tornado.web.RequestHandler):
def get(self):
self.write("Hello, getter!")
def post(self):
self.write("Hello, poster!")
#create http server
Handlers = [(r"/",http_server)]
App_Settings = {"debug":True}
HTTP_Server = tornado.web.Application(Handlers,**App_Settings)
#run http server
HTTP_Server.listen(9999)
tornado.ioloop.IOLoop.instance().start()
第一次使用此命令从终端运行良好:
python hello.py
此后,终端继续等待Tornado的输出。当我打开 http://localhost:9999 ,它返回“Hello,getter!”如所愿。但第二次,Python 显示错误:
Traceback (most recent call last):
File "hello.py", line 19, in <module>
HTTP_Server.listen(9999)
File "/usr/local/.../tornado/web.py", line 1227, in listen
server.listen(port, address)
File "/usr/local/.../tornado/netutil.py", line 100, in listen
sockets = bind_sockets(port, address=address)
File "/usr/local/.../tornado/netutil.py", line 265, in bind_sockets
sock.bind(sockaddr)
File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use
我按 Ctrl-Z 将“hello.py”发送到后台,但这不会释放端口。如果我关闭终端,端口就会被释放。然而,python 源文件的路径深深地嵌套在目录中,所以我不想在代码中的每次更改后关闭终端并重新启动它。有人建议我应该在应用程序设置中使用 debug=True 但这似乎与 Tornado 保持端口的问题无关。
我也尝试过“pidof python”,然后杀死所有python进程,但端口仍然被顽固的Tornado占据。有没有办法用Python语句释放Tornado持有的所有端口?还是手动?
最佳答案
如果你可以使用 Python 语句释放 Tornado 端口,这并不是你问题的真正答案,但由于它似乎已经解决了你的问题,我想无论如何我都会写一个简短的答案;
Ctrl-Z
只会让您的程序进入休眠状态,但不会释放任何端口。
如果您使用 Ctrl-C
,程序将完全停止。这将允许您简单地使用 shell 历史记录来再次启动它。
关于python - 如何释放端口然后第二次运行Tornado应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9529482/