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,不过 ...
随机推荐
- C# 字符串知识整理
新知识点,只是对于本人来说而已. 系统处理文本的方式 [新知识点].NET Framework .NET Framework的定义:其包含了一个公共语言运行时(Common Language Runt ...
- 搞个这样的APP要多久? (转)
这是一个“如有雷同,纯属巧合”的故事,外加一些废话,大家请勿对号入座.开始了…… 我有些尴尬地拿着水杯,正对面坐着来访的王总,他是在别处打拼的人,这几年据说收获颇丰,见移动互联网如火如荼,自然也想着要 ...
- JSP简单练习-站点计数器
<%@ page contentType="text/html;charset=gb2312" %> <%@ page import="javax.se ...
- android键盘锁定问题
android经常使用KeyguardLock解锁.但需要使用后打电话reenableKeyguard()锁定被解除.否则,会导致其他进程无法锁定屏幕,使用相同的WakeLock唤醒屏幕后还需要使用r ...
- ubuntu13.10 下一个 g++和gcc 4.8不兼容的问题不能被安装
前gcc这是4.8.x.导致g++不能用.因此,要 网上找了很多办法,在安装过程中或这些以下问题的出现: 1. Unable to exec g++.real: 没有那个文件或文件夹 2. 下列软件包 ...
- MPI编程简述
第三章MPI计划 3.1 MPI简单介绍 多线程是一种便捷的模型,当中每一个线程都能够訪问其他线程的存储空间.因此,这样的模型仅仅能在共享存储系统之间移植. 一般来讲,并行机不一定在各处理器之间共享存 ...
- ScrollView 嵌套ListView 幻灯冲突,和显示不全
import android.content.Context; import android.util.AttributeSet; import android.widget.ListView; /* ...
- 【高德地图API】汇润做爱地图技术大揭秘
原文:[高德地图API]汇润做爱地图技术大揭秘 昨日收到了高德地图微信公众号的消息推送,说有[一大波免费情趣用品正在袭来],点进去看了一眼,说一个电商公司(估计是卖情趣用品的)用高德云图制作了一张可以 ...
- Linux 时区变化
1.查看当前的时区 date -R 2.改动当前时区 tzselect 之后会出来一个选项菜单,选择你想要的时区就OK了 3.替换系统时区文件 cp /usr/share/zoneinfo/XXX/Y ...
- SQL2005性能分析一些细节功能你是否有用到?(二)
原文:SQL2005性能分析一些细节功能你是否有用到?(二) 上一篇:SQL2005性能分析一些细节功能你是否有用到? 我简单的提到了些关于SQL性能分析最基本的一些方法,下面的文章我会陆续补充.前面 ...