在Tornado框架中,关于请求处理与实例创建的行为,主要取决于你是如何组织你的Tornado应用的。通常,Tornado本身并不直接为每个请求新建一个类的实例,而是使用了一种称为“RequestHandler”的机制来处理请求。
基本的RequestHandler行为
当你定义一个继承自tornado.web.RequestHandler
的类时,这个类并不是直接被实例化来处理每个请求。相反,Tornado框架会根据URL路由配置,当请求到来时,动态地创建这个类的实例来处理该请求。因此,对于每个请求,Tornado会创建一个对应RequestHandler类的新实例。
示例
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
在上面的例子中,每当有请求到达根URL(“/”)时,Tornado都会创建一个MainHandler
的新实例来处理这个请求。
注意事项
- 单例模式与Tornado:虽然Tornado为每个请求创建一个新的
RequestHandler
实例,但如果你需要在你的应用中实现单例模式(比如,全局的数据库连接或配置对象),你需要自己管理这些单例对象的生命周期。 - 状态保持:由于每个请求都处理在一个新的
RequestHandler
实例中,因此你不能直接在RequestHandler
的实例之间共享状态(除非这些状态被存储在全局变量、数据库或其他持久化存储中)。 - 性能:为每个请求创建新的
RequestHandler
实例并不一定会导致性能问题,因为Python的解释器能够高效地处理对象的创建和销毁。然而,如果你在处理请求时创建了大量的临时对象,那么可能需要关注内存使用和垃圾回收。
综上所述,Tornado为每个请求动态地创建RequestHandler
的新实例来处理该请求。