pythonxuexi 2019-06-28
之前着重讲解Tornado的编程知识点,所有之前的例子都使用最简单的IOLoop启动方式运行。本节学习如何优化Tornado的运行方式,以达到快捷、易用及资源利用优化的目的。
到目前为止,本章通过如下方式启动tornado程序:
def make_app(): return tornado.web.Application([ #此处写入映射 ]) def main(): app=make_app() #建立Application对象 app.listen(8888) #设置监听端口 IOLoop.current().start() #启动IOLoop if __name__ == '__main__': main()
通过这种方式启动的程序一旦出错,则只能通过Windows任务管理器或Linux命令行Kill掉Python进行。因为调试需要频繁地进行:启动→差错→停止→排错→重启...的迭代流程,所以这样简单的方法并不利于程序调试,本节学习如何简化调试流程。
通过向Application实例传入参数debug=True,可以将程序以调试模式启动,例如:
def make_app(): return tornado.web.Application([ #此处写入映射 ], debug=True #调试模式 )
在这种模式下开发者可以获得如下便利:
在默认情况下Tornado的IOLoop不会响应Linux控制台的Ctrl+C命令,导致程序无法便捷地退出运行。
要响应Linux控制台的Ctrl+C命令,则可以在运行中捕获KeyboardInterrupt异常并调用IOLoop.stop()函数:
def main(): app=make_app() #建立Application对象 app.listen(8888) #设置监听端口 try: #启动IOLoop tornado.ioloop.IOLoop.current().start() except KeyboardInterrupt: tornado.ioloop.IOLoop.current().stop() #此处执行资源回收工作 print("Program exit!") if __name__ == '__main__': main()
这也在控制台发送了Ctrl+C请求后,程序可有机会回收系统的其它资源并退出执行。
注意:在Windows平台上,产生KeyboardInterrupt中断的方式是Ctrl+Pause