Python框架之Tornado(概述)

本系列博文计划:

  1、剖析基于Python的Web框架Tornado的源码,为何要阅读源码?

Tornado 由前 google 员工开发,代码非常精练,实现也很轻巧,加上清晰的注释和丰富的 demo,我们可以很容易的阅读分析 tornado. 通过阅读 Tornado 的源码,你将学到:

理解 Tornado 的内部实现,使用 tornado 进行 web 开发将更加得心应手。

如何实现一个高性能,非阻塞的 http 服务器。

如何实现一个 web 框架。

各种网络编程的知识,比如 epoll

python 编程的绝佳实践

视频分享链接:

https://study.163.com/course/introduction/1209485881.htm?share=2&shareId=400000000535031

https://study.163.com/course/introduction/1209407824.htm?share=2&shareId=400000000535031

https://study.163.com/course/introduction/1209401891.htm?share=2&shareId=400000000535031

在tornado的子目录中,每个模块都应该有一个.py文件,你可以通过检查他们来判断你是否从已经从代码仓库中完整的迁出了项目。在每个源代码的文件中,你都可以发现至少一个大段落的用来解释该模块的doc string,doc string中给出了一到两个关于如何使用该模块的例子。

  2、为Python开发一个完善的MVC框架

  首先将带着大家一起来剖析基于python编写的Web框架 tornado ,本着易读易懂的目标来写这一系列,寄希让小白也能zeng明白其中的道理,与其说剖析还不如说是白话,因为本系列都会用通俗的语言去描述Web框架中的各个知识点。

概述

Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化。

Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题,请参阅C10K problem。)

下载安装:

1

2

3

pip3 install tornado

源码安装

https://pypi.python.org/packages/source/t/tornado/tornado-4.3.tar.gz

Tornado模块分类

1. Core web framework

tornado.web — 包含web框架的大部分主要功能,包含RequestHandler和Application两个重要的类

tornado.httpserver — 一个无阻塞HTTP服务器的实现

tornado.template — 模版系统

tornado.escape — HTML,JSON,URLs等的编码解码和一些字符串操作

tornado.locale — 国际化支持

2. Asynchronous networking 底层模块

tornado.ioloop — 核心的I/O循环

tornado.iostream — 对非阻塞式的 socket 的简单封装,以方便常用读写操作

tornado.httpclient — 一个无阻塞的HTTP服务器实现

tornado.netutil — 一些网络应用的实现,主要实现TCPServer类

3. Integration with other services

tornado.auth — 使用OpenId和OAuth进行第三方登录

tornado.database — 简单的MySQL服务端封装

tornado.platform.twisted — 在Tornado上运行为Twisted实现的代码

tornado.websocket — 实现和浏览器的双向通信

tornado.wsgi — 与其他python网络框架/服务器的相互操作

4. Utilities

tornado.autoreload — 生产环境中自动检查代码更新

tornado.gen — 一个基于生成器的接口,使用该模块保证代码异步运行

tornado.httputil — 分析HTTP请求内容

tornado.options — 解析终端参数

tornado.process — 多进程实现的封装

tornado.stack_context — 用于异步环境中对回调函数的上下文保存、异常处理

tornado.testing — 单元测试

框架使用

写一个hello,world:

#!/usr/bin/env python

# -*- coding:utf-8 -*-


import tornado.ioloop

import tornado.web



class MainHandler(tornado.web.RequestHandler):

    def get(self):

        self.write("Hello, world")


application = tornado.web.Application([

    (r"/index", MainHandler),

])



if __name__ == "__main__":

    application.listen(8888)

    tornado.ioloop.IOLoop.instance().start()

第一步:执行脚本,监听 8888 端口

第二步:浏览器客户端访问 /index  -->  http://127.0.0.1:8888/index

第三步:服务器接受请求,并交由对应的类处理该请求

第四步:类接受到请求之后,根据请求方式(post / get / delete ...)的不同调用并执行相应的方法

第五步:方法返回值的字符串内容发送浏览器

由上述分析,我们将整个Web框架分为两大部分:

待请求阶段,即:创建服务端socket并监听端口

处理请求阶段,即:当有客户端连接时,接受请求,并根据请求的不同做出相应的相应

那么在记下来的博文中将按照这两种分类来进行剖析...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354

推荐阅读更多精彩内容

  • 简介 Tornado龙卷风是一个开源的网络服务器框架,它是基于社交聚合网站FriendFeed的实时信息服务开发而...
    JunChow520阅读 54,027评论 4 46
  • 事件驱动编程 事件驱动编程是一种网络编程范式,程序的执行流由外部事件来决定,特点是包含一个事件循环,当外部事件发生...
    JunChow520阅读 3,813评论 0 1
  • 官方文档中文文档Tornado概览浅谈Python Web 框架:Django, Twisted, Tornado...
    一只写程序的猿阅读 41,931评论 7 50
  • 1,简介 Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼We...
    晓可加油阅读 1,315评论 0 2
  • 其中Tornado的定义是 Web 框架和异步网络库,其中他具备有异步非阻塞能力,能解决他两个框架请求阻塞的问题,...
    HappyOn阅读 2,148评论 2 5