У меня есть этот код (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,, возвращается «Привет, получатель!» как и хотел. Но во второй раз 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, но порт все еще удерживается упрямым Торнадо. Есть ли способ освободить все порты, удерживаемые Торнадо, с помощью некоторого оператора Python? или вручную?