2014-11-22 94 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函数中。

相关问题