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,不过 ...
随机推荐
- WebStorm的compass配置
在webstorm中配置compass WebStorm是功能强大的前端开发专用IDE,拥有即时编辑(chrome).自动完成.debugger.Emmet.HTML5 支持.JSLint.Less. ...
- C#
抽象类其中创建一个静态方法
</pre><pre name="code" class="csharp"><span style="font-size ...
- 理解git经常使用命令原理
git不同于类似SVN这样的版本号管理系统,尽管熟悉经常使用的操作就能够满足大部分需求,但为了在遇到麻烦时不至于靠蛮力去尝试,了解git的原理还是非常有必要. 文件 通过git管理的文件版本号信息所有 ...
- 经验36--C#无名(大事,物...)
有时候,方便代码,它会使用匿名的东西. 1.匿名事件 args.CookieGot += (s, e) => { this ...
- C#+Mapxtreme 实现一些GIS系统基本的功能
此程序包括了mapxtreme地图相关基本功能的演示其中包括 鹰眼地图,图层控制,发达,缩小,平移地图,地图模糊查询,中点工具,距离测量工具,面积测量工具,图元信息查看工具.适合于企业级开发,可以为您 ...
- Fiddler工具的基本功能(转)
Fiddler是一款用于网页数据分析,抓取的工具,里面集成了对网页强大的功能外,还可以通过设置,使其对手机的数据也可以进行抓取 Fiddler的原理是: 通过在客户端和服务器之间创建一个代理服务器来对 ...
- ios 串
1.是推断包括字符串 if( [str rangeOfString:@"hello"].location != NSNotFound) { NSLog(@"yes&quo ...
- ASP.NET MVC(C#)和Quartz.Net组件
ASP.NET MVC(C#)和Quartz.Net组件 在之前的文章<推荐一个简单.轻量.功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler>和&l ...
- Windows Cygwin Redis 安装(转)
在win平台下编译Redis一般有两种方式: 1. 基于MS VC进行编译,生成原生可执行文件 该方式需要创建MSVC项目文件以及对Redis源码进行适当调整. 这里提供一个可行版本,由微软开放团队进 ...
- SVD奇异值分解的几何物理意义资料汇总
学习SVD奇异值分解的网上资料汇总: 1. 关于svd的一篇概念文,这篇文章也是后续几篇文章的鼻祖~ http://www.ams.org/samplings/feature-column/fcarc ...