上一篇文章: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