Python:Tornado 第四章:Tornado網站部署:第一節:除錯模式

Mark發表於2019-02-16

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

之前著重講解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進行。因為除錯需要頻繁地進行:啟動→差錯→停止→排錯→重啟…的迭代流程,所以這樣簡單的方法並不利於程式除錯,本節學習如何簡化除錯流程。

1、自動載入

通過向Application例項傳入引數debug=True,可以將程式以除錯模式啟動,例如:

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

在這種模式下開發者可以獲得如下便利:

  • 自動載入:對專案中任何*.py原始檔的修改將導致程式自動重啟並載入修改後的程式碼檔案。這樣極大地簡化了開發者因為偵錯程式需要頻繁重啟。
  • 錯誤追溯:當RequestHandler;處理使用者訪問出現異常時,系統的錯誤資訊呼叫棧將被推送到瀏覽器中,使得除錯者可以馬上查詢錯誤的根源。
  • 禁用模板快取:在運營環境中模板快取能提高效率,但在除錯期間佔用了更多的系統資源,所以將其禁用有利於開發者進行除錯。

注意:在運營環境中不要開啟Debug模式,這樣會增加網站被攻擊的危險。

2、Ctrl+C退出機制

在預設情況下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

相關文章