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进行处理。未完……
tornado settings想到的的更多相关文章
- tornado 的 define 和options方法解读
一.源码解读 tornado是facebook开源的非阻塞web容器,类似java的netty,tornado.options是负责解析tornado容器的全局参数的,同时也能够解析命令行传递的参数和 ...
- jupyter login
anaconda2/lib/python2.7/site-packages/notebook/auth/login.py """Tornado handlers for ...
- tornado设置settings
1.作用 设置应用程序相关参数 2.用法 settings = dict() settings["debug"] = True tornado.web.Application.__ ...
- Tornado.web.Application之-settings
应用程序配置 class tornado.web.Application(handlers:List [Union [Rule,Tuple]] = None,default_host:str = N ...
- day 61 Django part-1 django的安装,以及初学者三件套(以及settings中的mysql配置)
我们的django到底是什么东西呢? 我们的代码都是在后台写的,包括我们的pycharm都是属于后台的工具,但是我们的后端开发说到底是需要开发完了之后拿到用户面前的,让我们的用户看到我们的东西,首先要 ...
- 5.(基础)tornado异步
终于到了传说中的异步了,感觉异步这个名字听起来就很酷酷的,以前还不是多擅长Python时,就跑去看twisted的源码,结果给我幼小的心灵留下了创伤.反正包括我在内,都知道异步编程很强大,但是却很少在 ...
- 4.(基础)tornado应用安全与认证
这一节我们介绍应用安全与认证,其实中间省略了一个数据库.对于tornado来说,读取数据库的数据,性能的瓶颈还是在数据库上面.关于数据库,我在<>中介绍了sqlalchemy,这是一个工业 ...
- 一个简单的基于Tornado二手房信息统计项目的开发实现
Purpose 最近因为要买房子,扫过了各种信息,貌似lianjia上的数据还是靠点谱的(最起码房源图片没有太大的出入),心血来潮想着做几个图表来显示下房屋的数据信息,顺便练练手. 需求分析 1从li ...
- Python(九)Tornado web 框架
一.简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过 ...
随机推荐
- ehCache浅谈(转)
ehcache FAQ中提到 Remember that a value in a cache element is globally accessible from multiple threads ...
- slf自己主动绑定实现类过程推断
依照绑定实现类的方式是基于约定原则:推断分下面几个步骤 1.LoggerFactory扫描实现类路径有几个实现类,即在org/slf4j/impl/下有几个StaticLoggerBinder.cla ...
- 解决IE下Ajax请求无效
在做web开发是,大多时候都会使用FireFox作为调试的浏览器.上面携带的FireBug用来调试JavaScript实在是太方便了,绝大多数的问题都能够通过它跟踪调试出来.但是,当项目发布时,不能仅 ...
- 好大滴坑, Spring MVC覆盖了Trsaction
好大滴坑. Spring MVC覆盖了Trsaction 解决方式: <!-- package-scan 4 Spring MVC --> <context:component-sc ...
- linux网络编程投票
投票系统 1.说明: 写了一个投票系统.过程是先配置好server,在写一个网上投票功能.要实现网上投票功能. 事实上功能实现还是非常easy的,麻烦一点的在于过程比較繁杂,要做的东西还是挺多的. 2 ...
- Ubuntu14.04 工作区设置
记ubuntu您可以切换工作区,但我按住 Ctrl+Alt+方向键 交换器,有没有反应,在这样的使用切换啊. 原来Ubuntu14.04默认并没有开启,仅仅须要设置一下就OK了. 1.打开系统设置.外 ...
- ACM-凸多边形的计算几何——hrbust1429
凸多边形 称号:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1429 Descri ...
- OR1200数据Cache运用情景分析
以下摘录<步骤吓得核心--软-core处理器的室内设计与分析>一本书 13.7DCache使用情景之中的一个--存储指令运行阶段DCache失靶 存储指令运行阶段DCache失靶这样的情景 ...
- android static达到Service与Activity于Handler沟通
供static理解力,仅适用于static理解力,不喜勿喷 第一种方式:离Service中获取Activity的static变量,调用该静态变量的getHandler()获取Handler进行发送消息 ...
- 【C++模版之旅】项目中一次活用C++模板(traits)的经历
曾经曾在一个项目中碰到过一个挺简单的问题,但一时又不能用普通常规的方法去非常好的解决,最后通过C++模板的活用,通过traits相对照较巧妙的攻克了这个问题.本文主要想重现问题发生,若干解决方式的比較 ...