zoukankan      html  css  js  c++  java
  • tornado settings想到的

    今天有足够多的时间来看看Tornado中RequestHandler和Application这两个类的关系。

    昨天想要调用settings中的内容,找了好半天不知道怎么在handler中使用settings,后来一点一点试出来了,哈哈。比如一个类:

    class HelloHandler(tornado.web.RequestHandler):
    
      def get(self):
    
        path = self.application.settings["static_path"]
        self.write(path)
        self.finish()

    由此我们知道tornado.web.Application是作为参数传入到了tornado.web.RequestHandler中。去看一下源代码先

    class RequestHandler(object):
        
        。。。
        def __init__(self, application, request, **kwargs):
            super(RequestHandler, self).__init__()
    
            self.application = application
            self.request = request 
            。。。

    而tornado.web.Application同样有着指向RequestHandler的指针(可以这么理解的)。

    让我们继续看看IOloop这个类是如何工作的。

    地一个方法绝对就是instance(cls)这个类方法。

    @classmethod
    def instance(cls):
        if not hasattr(cls,"_instance")
            _instance = cls()
        return _instance

    我想在这里再次说一下实例方法,类方法和静态方法的区别:

    首先实例方法和类方法,是有一个特别的参数的,self或者cls,当然这不是关键字我们可以使用其他的来代替。当一个实例即使调用了类方法,这个方法的第一参数传入的仍为类。

    而如果一个类调用了实例方法那是会报错的。

    这个instance是一个类似单例的一个模式。返回一个IOloop的实例。调用start()方法将底层的mulitplex模型跑起来,正是这种模型才能保证tornado有着很高的处理效率。这里重点看一下是如何与http_server相关联起来的。可是代码找了半天根本没有提到httpserver'的事情只是不断的在update events然后再对event进行处理。

    我们来到httpserver .py这里看看这里是否有和ioloop有关的代码。可以看到在httpserver中是import ioloop,并且在start()方法中调用了instance方法。可是在demo中的helloworld并没有瞧见有谁调用了httpserver的start()方法。在继续找……  在httpserver中的listen函数中发现自己调用了自己的start方法,这样就齐了。

    我们开始看一下helloworld中的main方法。

    application = tornado.web.Application([
            (r"/", MainHandler),
        ])
        http_server = tornado.httpserver.HTTPServer(application) //这里对handler进行注册
        http_server.listen(options.port) //这里启动了httpserver
        tornado.ioloop.IOLoop.instance().start() //这里启动了ioloop

    在httpserver的start方法中也可以看出httpserver收集来的事件将会传递给ioloop进行处理。未完……

  • 相关阅读:
    WebGL着色器32位浮点数精度损失问题
    Web地图呈现原理
    虚拟DOM详解
    webgl开发第一道坎——矩阵与坐标变换
    作为前端应当了解的Web缓存知识
    浅谈模板引擎
    WebGL中深度碰撞方法总结
    不加班的项目从排期开始
    从0到1带人做项目
    webgl自学笔记——深度监测与混合
  • 原文地址:https://www.cnblogs.com/yujinghui/p/4093738.html
Copyright © 2011-2022 走看看