Tornado介绍

​Tornado​ 全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,由FriendFeed公司在自己的网站FriendFeed中使用,被Facebook收购以后框架在2009年9月以开源软件形式开放给大众。Tornado 框架。Tornado 在很大程度上与 Flask 一样简单,但有一个主要区别:Tornado 是专门为处理异步进程而构建的。

特点:

  • 作为Web框架,是一个轻量级的Web框架,类似于另一个Python web框架Web.py,其拥有异步非阻塞IO的处理方式。
  • 作为Web服务器,Tornado有较为出色的抗负载能力,官方用nginx反向代理的方式部署Tornado和其它Python web应用框架进行对比,结果最大浏览量超过第二名近40%。

性能:

  • Tornado有着优异的性能。它试图解决C10k问题,即处理大于或等于一万的并发.

Tornado与Django

Django
Django是走大而全的方向,注重的是高效开发,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。

Django提供的方便,也意味着Django内置的ORM跟框架内的其他模块耦合程度高,应用程序必须使用Django内置的ORM,否则就不能享受到框架内提供的种种基于其ORM的便利。

  • session功能
  • 后台管理
  • ORM

Tornado

Tornado走的是​少而精​的方向,注重的是​性能优越​,它最出名的是异步非阻塞的设计方式。

Tornado 具有什么样的优点,我们为什么要用它?

• 轻量级 Web 框架

• 异步非阻塞 IO 处理方式

• 出色的抗负载能力

• 优异的处理性能,不依赖多进程/多线程,一定程度上解决 C10K 问题

• WSGI全栈替代产品,推荐同时使用其 Web 框架和 HTTP 服务器

异步基础

要理解协程,先要理解异步,要理解异步,先要理解同步,与同步相关的概念又有阻塞与非阻塞,下面一一做简单介绍。

阻塞

阻塞状态指程序未得到所需计算资源时被挂起的状态。程序在等待某个操作完成期间,自身无法继续干别的事情,则称该程序在该操作上是阻塞的。

常见的阻塞形式有:网络 I/O 阻塞、磁盘 I/O 阻塞、用户输入阻塞等。阻塞是无处不在的,包括 CPU 切换上下文时,所有的进程都无法真正干事情,它们也会被阻塞。如果是多核 CPU 则正在执行上下文切换操作的核不可被利用。

非阻塞

程序在等待某操作过程中,自身不被阻塞,可以继续运行干别的事情,则称该程序在该操作上是非阻塞的。非阻塞并不是在任何程序级别、任何情况下都可以存在的。

仅当程序封装的级别可以囊括独立的子程序单元时,它才可能存在非阻塞状态。

非阻塞的存在是因为阻塞存在,正因为某个操作阻塞导致的耗时与效率低下,我们才要把它变成非阻塞的。

同步

不同程序单元为了完成某个任务,在执行过程中需靠某种通信方式以协调一致,称这些程序单元是同步执行的。

例如购物系统中更新商品库存,需要用“行锁”作为通信信号,让不同的更新请求强制排队顺序执行,那更新库存的操作是同步的。 简言之,同步意味着有序。

异步

为完成某个任务,不同程序单元之间过程中无需通信协调,也能完成任务的方式,不相关的程序单元之间可以是异步的。

例如,爬虫下载网页。调度程序调用下载程序后,即可调度其他任务,而无需与该下载任务保持通信以协调行为。不同网页的下载、保存等操作都是无关的,也无需相互通知协调。这些异步操作的完成时刻并不确定。 简言之,异步意味着无序。

这个概念让我想起了上学时学过的一篇文章,讲统筹安排的,比如你现在要烧水,做饭,洗衣服三件事,如果同步的进行,先烧水,在水烧开的过程中你什么都不做就等着它烧开,然后水烧开以后你再接着做饭,饭做熟的过程中你也是什么都不干,就干等着,饭做熟后再去将洗衣服放入洗衣机中去洗,之后又是干等着。如果单做一件事的时间是烧水10分别,做饭30分钟,洗衣服20分钟,那么完成这三件事总共需要60分钟。

如果将这三件事异步的去进行,我先将水烧上,然后再将衣服放到洗衣机里,然后去做饭,这三件事同时进行,当水烧开的时候给我一个信号,这里就是水壶会响,我听到响声以后我会中止做饭这件事情去处理烧开的水,比如把它倒到保温瓶中,衣服洗完以后洗衣机也会给我一个信号,那么我就会将衣服拿出来晾晒。这样处理完三件事总共的时间就由三件事情中最长的时间决定,这里就是30分钟,其实异步的处理就是最大程度的发挥cpu的处理能力,让其在同一时间内做更多的事情。

Tornado 如何安装

pip install tornado 【安装最新稳定版】pip install tornado==version 【指定版本安装】

Tornado 核心内容

1 Tornado.Web:Tornado 的基础 Web 框架

• RequestHandler:封装对请求处理的所有信息和处理方法

• get/post/..:封装对应的请求方式

• write():封装响应信息,写响应信息的一个方法

2 Tornado.ioloop:核心IO循环模块,封装 Linux 的 Epoll 和 BSD 的 kqueue,Tornado 高性能处理的核心。

• current()返回当前线程的 IOLoop 实例对象

• start()启动 IOLoop 实力对象的 IO 循环,开启监听

3 HttpServer 监听端口

• tornado.httpserver.HTTPServer(app)

• httpserver.listen(port)

4 HttpServer 实现多进程操作

• tornado.httpserver.HTTPServer(app)

• httpserver.bind(port)

• httpserver.start(0/None/<0/num)

Tornado基础知识相关推荐

  1. python语言的单行注释以井号开头_推荐|零基础学习Python基础知识

    原标题:推荐|零基础学习Python基础知识 Python是一种面向对象.解释型计算机程序设计语言.语法简洁清晰,强制用空白符作为语句缩进. Python具有丰富和强大的库,又被称为胶水语言.能把其他 ...

  2. python基础知识有哪些需要背(记住是基础知识)我是初学者

    大家好,小编来为大家解答以下问题,一个有趣的事情,一个有趣的事情,今天让我们一起来看看吧! 1.python基础知识有哪些需要背(记住是基础知识)我是初学者 或看好Python的广阔前景,或看中Pyt ...

  3. Python基础知识笔记

    文章目录 Python基础知识 教程:https://www.liaoxuefeng.com/wiki/1016959663602400 内置函数:https://docs.python.org/3/ ...

  4. python基础知识点总结-python基础知识,python知识点汇总大一

    阶段一:Python开发基础 Python全栈开发与人工智能之Python开发基础知识学习内容包括:Python基础语法.数据类型.字符编码.文件操作.函数.装饰器.迭代器.内置方法.常用模块等. 阶 ...

  5. web基础知识(3)--HTTP协议与web框架与其他

    一.HTTP协议 HTTP(Hyper Text Transfer Protocol 超文本传输协议 )协议是基于TCP/IP协议的用于传递数据的协议,其默认端口为80/TCP,简单来说就是客户端与服 ...

  6. 嵌入式Linux的OTA更新,基础知识和实现

    嵌入式Linux的OTA更新,基础知识和实现 OTA updates for Embedded Linux, Fundamentals and implementation 更新的需要 一旦嵌入式Li ...

  7. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  8. 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...

    注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...

  9. 《计算机网络应用基础》模拟试卷(六),《计算机与网络应用基础知识1》模拟试卷...

    <计算机与网络应用基础知识1>模拟试卷 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 <计算机与网络应用基础知识1& ...

最新文章

  1. oracle linux 5.8安装oracle 11g rac环境之grid安装
  2. linux 内核 file_operations结构体各项解析
  3. 多线程:了解一下ForkJoin、FutureTask、BlockingQueue
  4. 关于浮点数的原理详解
  5. m2eclipse插件
  6. iOS Xcode全面剖析
  7. 前端服务器获取js文件偶尔慢_我所认识的前端性能优化
  8. 信捷电子凸轮使用_FM352电子凸轮使用指南
  9. plotly django_使用Plotly为Django HTML页面进行漂亮的可视化
  10. [极客大挑战 2019]Knife [RoarCTF 2019]Easy Calc
  11. snmp v3的安全配置 snmp认证与加密配置(53)
  12. xml文件的三种解析方式 DOM SAM PULL
  13. 梦织未来Windows驱动编程 第03课 驱动的编程规范
  14. java视频压缩 lz4_压缩包格式有哪些?
  15. 如何快速去掉word页眉横线
  16. wamp安装composer
  17. SpringBoot 项目修改html后不需要重新启动(热部署)
  18. Python多进程批量处理图片
  19. 安装和配置PhysX
  20. 电子商务复习笔记一:电子商务概述与类型

热门文章

  1. 2021年化工自动化控制仪表考试总结及化工自动化控制仪表模拟试题
  2. 谷歌浏览器自动打印并关闭当前页
  3. 完成原生JavaScript+css+html之海报画廊笔记
  4. 产生式模型和判别式模型区分
  5. 基于VINS与FastPlanner的无人机自主飞行Gazebo仿真
  6. Windows 10系统,cmd输入java,java -version有效,输入javac无效的解决办法,亲测
  7. python中pylint使用方法(pylint代码检查)
  8. 计算公鸡母鸡小鸡数量
  9. matlab中资源管理无法打开,安装资源的解决办法
  10. 【基础知识】引用是什么?