Python:Tornado 第四章:Tornado網站部署:第一節:調試模式

上一篇文章: Python:Tornado 第三章:HTML5 WebSocket概念及應用:第三節:客戶端編程
下一篇文章: Python:Tornado 第四章:Tornado網站部署:第二節:靜態文件

以前着重講解Tornado的編程知識點,全部以前的例子都使用最簡單的IOLoop啓動方式運行。本節學習如何優化Tornado的運行方式,以達到快捷、易用及資源利用優化的目的。web

到目前爲止,本章經過以下方式啓動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進行。由於調試須要頻繁地進行:啓動→差錯→中止→排錯→重啓...的迭代流程,因此這樣簡單的方法並不利於程序調試,本節學習如何簡化調試流程。segmentfault

一、自動加載

經過向Application實例傳入參數debug=True,能夠將程序以調試模式啓動,例如:瀏覽器

def make_app():
    return tornado.web.Application([
        #此處寫入映射
    ],
    debug=True  #調試模式
    )

在這種模式下開發者能夠得到以下便利:緩存

  • 自動加載:對項目中任何*.py源文件的修改將致使程序自動重啓並加載修改後的代碼文件。這樣極大地簡化了開發者由於調試器須要頻繁重啓。
  • 錯誤追溯:當RequestHandler;處理用戶訪問出現異常時,系統的錯誤信息調用棧將被推送到瀏覽器中,使得調試者能夠立刻查找錯誤的根源。
  • 禁用模板緩存:在運營環境中模板緩存能提升效率,但在調試期間佔用了更多的系統資源,因此將其禁用有利於開發者進行調試。
注意:在運營環境中不要開啓Debug模式,這樣會增長網站被攻擊的危險。

二、Ctrl+C退出機制

在默認狀況下Tornado的IOLoop不會響應Linux控制檯的Ctrl+C命令,致使程序沒法便捷地退出運行。app

要響應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請求後,程序可有機會回收系統的其它資源並退出執行。tornado

注意:在Windows平臺上,產生KeyboardInterrupt中斷的方式是Ctrl+Pause
相關文章
相關標籤/搜索