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进行处理。未完……

时间: 2024-12-16 00:18:31

tornado settings想到的的相关文章

在Mopaas上部署WSGI类型的(Django, Tornado, Flask)Python应用

第一部分:安装必要工具. 1.因为这是部署Python开发环境,所以安装pip可以简化一些软件的安装过程.(PIP对应Lua的luarocks) sudo apt-get install python-pip 安装三个Python框架 sudo pip install flask sudo pip install django==1.5.1 sudo pip install tornado==3.1.1 2.安装Gunicorn,这是运行Python的WSGI HTTP服务. sudo pip

用 memcached 实现 Tornado 的 session 支持(一)

tornado 里面没有 session?不,当然有~我知道 github 上肯定有人帮我写好了~ O(∩_∩)O~ 于是乎,找到下面这个项目,用 memcached 实现 tornado 的 session.光会用可不行啊,让我们看看是怎么写的~ 项目地址:tornado-memcached-sessions 让我们先从 demo 看起.... app.py 中: 首先可以注意到,这里定义了一个新的 Application 类,继承于 tornado.web.Application, 在该类的

一个简单的基于Tornado二手房信息统计项目的开发实现

Purpose 最近因为要买房子,扫过了各种信息,貌似lianjia上的数据还是靠点谱的(最起码房源图片没有太大的出入),心血来潮想着做几个图表来显示下房屋的数据信息,顺便练练手. 需求分析 1从lianjia的网站上获取关键的房屋信息数据,然后按照自己的需求通过图表显示出来. 2每天从lianjia的网站上获取一次数据 3以上海地区为主(本人在上海) 4最终生成图表有:房屋交易总量,二手房均价,在售房源,近90天成交量,昨日带看次数 分析获取网站数据 1 数据源 数据的获取主要是从两个地方:

Tornado学习记录四

Structure of a Tornado web application A Tornado web application generally consists of one or more RequestHandler subclasses, an Application object which routes incoming requests to handlers, and a main() function to start the server. tornado 应用通常包括至

微信小程序连接Tornado

自己搭建Tornado 监听8000端口, 提供给小程序访问的地址为http://127.0.0.1:8000/index #!/usr/bin/env python # -*- coding:utf-8 -*- import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): print('GET方式请求成功') self.write("123"

Tornado Web 框架

一.简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关有用工具及优化. Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快.得利于其非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以

Python框架之Tornado(二)请求阶段

概述 上图是tornado程序启动以及接收到客户端请求后的整个过程,对于整个过程可以分为两大部分: 启动程序阶段,又称为待请求阶段(上图1.2所有系列和3.0) 接收并处理客户端请求阶段(上图3系列) 简而言之: 1.在启动程序阶段,第一步,获取配置文件然后生成url映射(即:一个url对应一个XXRequestHandler,从而让XXRequestHandler来处理指定url发送的请求):第二步,创建服务器socket对象并添加到epoll中:第三步,创建无线循环去监听epoll. 2.在

【从0開始Tornado建站】整体设计

Tornado是一个非堵塞的webserver,也是python的web框架中很优秀的一款.网上关于django的tutorial许多并且具体,关于tornado的使用就很少了.我想以我从0開始的方式一步一步用这个优秀的tornado框架建一个小站点.一方面加深自己的理解.还有一方面接受大家的建议和批评.更加进步~我注冊了个域名:http://www.ustchacker.com,因为server在学校里面.外网訪问不了,等功能完好后再挂到外网去. 我想建的是一个普通的站点,有登录.注冊.发表文

web框架之Tornado

Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本. 这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化. Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快. 得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以