tornado基本使用一
一、tornado web程序编写思路
- . 创建web应用实例对象,第一个初始化参数为路由映射列表
- . 定义实现路由映射列表中的handler类
- . 创建服务器实例, 绑定服务器端口
- . 启动当前线程的IOLoop
二、tornado.web
1.RequestHandler:
封装了对应一个请求的所有信息和方法,write(响应信息)就是写响应信息的一个方法;对应每一种http请求方式(get、post等),把对应的处理逻辑写进同名的函数名方法里面(如对应get请求方式,就将对应的处理逻辑写在get()方法中),当没有对应请求方式的成员方法时,会返回“405: Method Not Allowed”错误。
2.Application:
tarnado web框架的核心应用类,是与服务器对接的接口,里面保存了路由信息表,里面保存了路由信息表,其初始化接收的第一个参数就是一个路由信息映射元组的列表;其listen(端口)方法用来创建一个http服务器实例,并绑定到给的端口(注意:此时服务器并未开启监听)
3.tornado.ioloop
(1)tornado的核心io循环模块,封装了linux的epoll和BSD的kqueue,tornado高性能的基石
(2)epoll原理
(3)IOLoop.current(): 返回当前线程的IOLoop实例。
(4)IOLoop.start(): 启动IOLoop实例的IO循环,同时服务器监听被打开。
4.tornado.httpserver
实例:
- #!/usr/bin/env python
- # -*- coding:utf- -*-
- # Author:Irving
- # 一个简单的tornado web
- # 引用对应的tornado包
- from tornado.web import Application, RequestHandler
- from tornado.ioloop import IOLoop
- from tornado.httpserver import HTTPServer
- class IndexHandler(RequestHandler):
- def get(self):
- self.write("hello world!")
- if __name__ == '__main__':
- # 创建一个app应用
- app = Application([('/', IndexHandler)])
- # applisten('')
- # 为应用创建一个http服务
- http_server = HTTPServer(app)
- # 绑定对应的端口号
- http_server.listen()
- # 开启多个tornado进程
- # http_server.bind()
- # http_server.start()
- IOLoop.current().start()
5.tornado.options
(1)tornado.options模块 -- 全局参数定义、存储、转换
(2)tornado.options.define()
1. def define(name, default=None, type=None, help=None, metavar=None, multiple=False, group=None, callback=None)
2. name 选项变量名,须保证全局唯一性,否则会报“Option 'xxx' already defined in ...”的错误
3. default 选项变量的默认值,如不传默认为None
4. type 选项变量的类型,转换不成功时会报错,可以是str、float、int、datetime、timedelta中的某个,若未设置则根据default的值自动推断,若default也未设置,那么不再进行转换。可以通过利用设置type类型字段来过滤不正确的输入。
5. multiple 选项变量的值是否可以为多个,布尔类型,默认值为False,如果multiple为True,那么设置选项变量时值与值之间用英文逗号分隔,而选项变量则是一个list列表(若默认值和输入均未设置,则为空列表[])。
6. help 选项变量的帮助提示信息,在命令行启动tornado时,--help 可以查看所有选项变量的信息(注意,代码中需要加入tornado.options.parse_command_line())。
(3)tornado.options.options
全局options对象,所有定义的选项变量都会作为该对象的属性
(4)tornado.options.parse_command_line()
进行初始化
(5)tornado.options.parse_config_file(path)
(5)实例
- #!/usr/bin/env python
- # -*- coding:utf- -*-
- # Author:Irving
- # 一个简单的tornado web
- # 引用对应的tornado包
- from tornado.web import Application, RequestHandler
- from tornado.ioloop import IOLoop
- from tornado.httpserver import HTTPServer
- import tornado.options
- tornado.options.define("port", type=int, default=, help="端口号")
- class IndexHandler(RequestHandler):
- def get(self):
- self.write("hello world!")
- if __name__ == '__main__':
- tornado.options.parse_command_line()
- # 创建一个app应用
- app = Application([('/', IndexHandler)])
- # applisten('')
- # 为应用创建一个http服务
- http_server = HTTPServer(app)
- # 绑定对应的端口号
- http_server.listen(tornado.options.options.port)
- # 开启多个tornado进程
- # http_server.bind()
- # http_server.start()
- IOLoop.current().start()
tornado基本使用一的更多相关文章
- Python(九)Tornado web 框架
一.简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过 ...
- 使用tornado,我们可以做什么?
以下介绍都是建立在python2.x的基础上面,tornado使用任意版本皆可. 如果我们需要对外提供一个http server(web api)/websocket server时,我们都可以使用t ...
- tornado session
[转]tornado入门 - session cookie 和session 的区别: 1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以 ...
- tornado template
若果使用Tornado进行web开发可能会用到模板功能,页面继承,嵌套... 多页应用模板的处理多半依赖后端(SPA就可以动态加载局部视图),就算是RESTfull的API设计,也不妨碍同时提供部分模 ...
- tornado上手
http://www.tornadoweb.org/en/stable/ http://www.cnblogs.com/fanweibin/p/5418697.html import tornado. ...
- tornado+sqlalchemy+celery,数据库连接消耗在哪里
随着公司业务的发展,网站的日活数也逐渐增多,以前只需要考虑将所需要的功能实现就行了,当日活越来越大的时候,就需要考虑对服务器的资源使用消耗情况有一个清楚的认知. 最近老是发现数据库的连接数如果 ...
- centos 6.7 搭建tornado + nginx + supervisor的方法(已经实践)
首先,本来不想写这篇博客了,但是我测试了很多网上的例子包括简书的,全不行,我总结原因是自己太笨,搞了俩个晚上,后来决定,自己还是写一篇记录下来,保证自己以后使用 环境: centos6.7 64 py ...
- tornado中将cookie值设置为json字符串
不熟悉,找了很久,能FQ的话, https://groups.google.com/forum/#!topic/python-tornado/9Y--NgwjP_w 2楼有解释. tornado.es ...
- tornado 异步调用系统命令和非阻塞线程池
项目中异步调用 ping 和 nmap 实现对目标 ip 和所在网关的探测 Subprocess.STREAM 不用担心进程返回数据过大造成的死锁, Subprocess.PIPE 会有这个问题. i ...
- 离线安装 Python 2.7, paramiko 和 tornado
无非就是离线安装, 步骤比较繁琐, 记录一下. 需求很简单, 一个离线安装的 Python, 能跑 tornado 和 paramiko 1. 离线安装 Python 2.7 .tgz cd Pyth ...
随机推荐
- web手工项目04-测试报告的核心内容-HTTP请求和响应-fiddler工具进行抓包
回顾 登录功能测试(需求分析(输入分析,处理分析,输出分析),数据构造,编写用例) 测试点设计思路--扩展(相关业务,特殊角度-分支,异常,逆向) 流程图元素与画法(开始/结束,路径,数据,判定,步骤 ...
- Linux -- Reactor
结构 1. handles 资源的标志.这些资源通常包含网络连接,文件,定时器,同步对象等.handles 被用在注册服务器来标记socket,以便同步事件复用(Synchronous Event D ...
- MySQL中表的列结构的修改操作
首先创建一个用于测试的表test_table: drop table if exists test_table; CREATE TABLE `test_table` ( `id` int(11) DE ...
- 【Leetcode_easy】693. Binary Number with Alternating Bits
problem 693. Binary Number with Alternating Bits solution1: class Solution { public: bool hasAlterna ...
- 实现一个Promise
实现一个Promise promise特点 一个promise的当前状态只能是pending.fulfilled和rejected三种之一.状态改变只能是pending到fulfilled或者pend ...
- oracle多表关联查询和子查询
oracle多表关联查询和子查询 一.多表关联查询 例子: SQL> create table student1 ( sid ), sname ), sage )); Table created ...
- 用css美化select框
先上代码: .selectData{ height: 0.42rem; position: absolute; right:.28rem; top:.30rem; //去边框 border: none ...
- Oracle的varchar2如何比较大小
首先要说的是Oracle中字符类型的比较都是基于ASCII码表来实现的,我就简单做个总结. Oracle中varchar2类型的字符串使用的是非填充空格的标准来进行比较的(表格中右边的那列,注意空格的 ...
- Netty源码剖析-关闭服务
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线: ----源码: 先在服务端加个断点和修改下代码:如 ...
- 一个好隐蔽的C/C++代码bug
来自:微博@ruanyf, 一本书上说,下面的 C 语言代码可能会产生无限循环.看了半天,才意识到 Bug 在哪里. 完美解答: 数组下标越界.数组a总共有10个值,a[0]~a[9].for循环里面 ...