2014-11-22 219 views
2

我想在啓動我的Tornado網絡服務器時設置變量,所以我試圖覆蓋我的RequestHandler類中的initialize。但很顯然,initialize是一個請求時每次啓動,根據下面的代碼和它的輸出:如何在每次請求時使用Tornado調用初始化

#!/usr/bin/env python3 
# -*- coding: UTF-8 -*- 

import tornado.web 

class MainHandler(tornado.web.RequestHandler): 
    def initialize(self): 
     print("Launching initialization...") 

    def get(self): 
     print("Get: {}{}".format(self.request.host, self.request.uri)) 

app = tornado.web.Application([= 
    (r"/.*", MainHandler) 
]) 

def runserver(): 
    import tornado.ioloop 

    app.listen(8080) 
    tornado.ioloop.IOLoop.instance().start() 

if __name__ == "__main__": 
    runserver() 

標準輸出:

~ ➤ ./redirector.py 
Launching initialization... 
Get: 127.0.0.1:8080/ 
Launching initialization... 
Get: 127.0.0.1:8080/favicon.ico 
Launching initialization... 
Get: 127.0.0.1:8080/favicon.ico 
Launching initialization... 
Get: 127.0.0.1:8080/ 

此行爲是完全相反的是寫在doc

用於子類初始化的掛鉤。

(意思是它被稱爲在__init__末)

因此,沒有任何人知道該怎麼做我想做什麼?

在此先感謝。

回答

3

這不違背文檔;看看Structure of a Tornado app部分。爲每個請求創建一個RequestHandler對象。

如果您希望在應用程序僅啓動時執行代碼,請將Application類繼承並覆蓋__init__,或者將其放入runserver函數中。

相關問題