我是tornado web服务器的新手。当我使用python main_tornado.py启动tornado web服务器时,它正在工作。请看下面的代码。
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
当我使用CTRL+C停止服务器时,它给出了以下错误。
^CTraceback (most recent call last):
File "main_tornado.py", line 19, in <module>
tornado.ioloop.IOLoop.instance().start()
File "/home/nyros/Desktop/NewWeb/venv/lib/python3.2/site-packages/tornado/ioloop.py", line 301, in start
event_pairs = self._impl.poll(poll_timeout)
KeyboardInterrupt
请帮我解决问题。谢谢..
发布于 2017-05-13 08:11:07
您可以简单地从信号处理程序停止Tornado ioloop。它应该是安全的,这要归功于add_callback_from_signal()方法,事件循环将很好地退出,完成任何最终并发运行的任务。
import tornado.ioloop
import tornado.web
import signal
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([
(r"/", MainHandler),
])
def sig_exit(signum, frame):
tornado.ioloop.IOLoop.instance().add_callback_from_signal(do_stop)
def do_stop(signum, frame):
tornado.ioloop.IOLoop.instance().stop()
if __name__ == "__main__":
application.listen(8888)
signal.signal(signal.SIGINT, sig_exit)
tornado.ioloop.IOLoop.instance().start()
发布于 2013-06-15 01:27:44
代码是正常的。CTRL+C生成KeyboardInterrupt。要停止服务器,可以使用CTRL+Pause Break(在windows上)而不是CTRL+C。在linux上,CTRL+C也会生成KeyboardInterrupt。如果您将使用CTRL+Z程序将停止,但端口变得繁忙。
发布于 2018-07-27 07:39:59
我想说,最干净、最安全、最便携的解决方案是将所有的关闭和清理调用放在一个finally
块中,而不是依赖于KeyboardInterrupt
exception:
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([
(r"/", MainHandler),
])
# .instance() is deprecated in Tornado 5
loop = tornado.ioloop.IOLoop.current()
if __name__ == "__main__":
try:
print("Starting server")
application.listen(8888)
loop.start()
except KeyboardInterrupt:
pass
finally:
loop.stop() # might be redundant, the loop has already stopped
loop.close(True) # needed to close all open sockets
print("Server shut down, exiting...")
https://stackoverflow.com/questions/17101502
复制相似问题