Python Tornado核心及相关原理详解
Tornado的核心是什么?Tornado 的核心是 ioloop 和 iostream 这两个模块,前者提供了 一个高效的 I/O 事件循环,后者则封装了 一个无阻塞的 socket 。 通过向 ioloop 中添加网络 I/O 事件,利用无阻塞的 socket ,再搭配相应的回调函数,便可达到梦寐以求的高效异步执行。
一、Tornado简介
Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,由FriendFeed公司在自己的网站FriendFeed中使用,被Facebook收购以后框架在2009年9月以开源软件形式开放给大众。
二、Tornado特点:
作为Web框架,是一个轻量级的Web框架,其拥有异步非阻塞IO的处理方式。
作为Web服务器,Tornado有较为出色的抗负载能力,官方用nginx反向代理的方式部署Tornado和其它Python web应用框架进行对比,结果最大浏览量超过第二名近40%。
三、Tornado性能:
Tornado有着优异的性能。它试图解决C10k问题,即处理大于或等于一万的并发。
Tornado框架和服务器一起组成一个WSGI的全栈替代品。单独在WSGI容器中使用tornado网络框架或者tornaod http服务器,有一定的局限性,为了最大化的利用tornado的性能,推荐同时使用tornaod的网络框架和HTTP服务器。
四、应用场景
1,用户量大,高并发
如秒杀抢购、双十一某宝购物、春节抢火车票
2,大量的HTTP持久连接
使用同一个TCP连接来发送和接收多个HTTP请求/应答,而不是为每一个新的请求/应答打开新的连接的方法。
对于HTTP 1.0,可以在请求的包头(Header)中添加Connection: Keep-Alive。
四、Tornado开发方向:
Tornado走的是少而精的方向,注重的是性能优越,它最出名的是异步非阻塞的设计方式。
- HTTP服务器
- 异步编程
- WebSockets
五、tornado的基础web框架模块
RequestHandler
封装了对应一个请求的所有信息和方法,write(响应信息)就是写响应信息的一个方法;对应每一种http请求方式(get、post等),把对应的处理逻辑写进同名的成员方法中(如对应get请求方式,就将对应的处理逻辑写在get()方法中),当没有对应请求方式的成员方法时,会返回“405: Method Not Allowed”错误。
Application
Tornado Web框架的核心应用类,是与服务器对接的接口,里面保存了路由信息表,其初始化接收的第一个参数就是一个路由信息映射元组的列表;其listen(端口)方法用来创建一个http服务器实例,并绑定到给定端口
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Python tornado队列示例-一个并发web爬虫代码分享
Queue Tornado的tornado.queue模块为基于协程的应用程序实现了一个异步生产者/消费者模式的队列.这与python标准库为多线程环境实现的queue模块类似. 一个协程执行到yieldqueue.get会暂停,直到队列中有条目.如果queue有上限,一个协程执行yieldqueue.put将会暂停,直到队列中有空闲的位置. 在一个queue内部维护了一个未完成任务的引用计数,每调用一次put操作便会增加引用计数,而调用task_done操作将会减少引用计数. 下面是一个简单的
-
python-tornado的接口用swagger进行包装的实例
写这个文章的主要原因,就是因为没有相关的东西,导致我完全不知道应该怎么做,经过了两个晚上的摸索,终于搞清楚了,如果有谁需要tornado+swagger的输出模式,可以照这个套: 主要是static文件的生成 我们用swagger就是为了做一个静态页面,也就是生成一个static文件: 几个必备的工具:swagger-py-codegen我们不用他们的文件框架只需要其生成的static文件,拷贝到自己文件夹下即可: 1)需要注意的是生成文件需要用yaml文件,当编辑好文件后,最主要的是要注意ba
-
Python对Tornado请求与响应的数据处理
获取查询字符串参数 get_query_argument(name, default=_ARG_DEFAULT, strip=True) 从请求的查询字符串中返回指定参数name的值,如果出现多个同名参数,则返回最后一个的值: default为路由中未传name参数时返回的默认值,如default未设置,则会抛出tornado.web.MissingArgumentError异常: strip表示是否过滤掉左右两边的空白字符,默认为过滤. get_query_arguments(name, st
-
Python Tornado之跨域请求与Options请求方式
问题背景 公司的项目是前后端分离,前端Vue+后端JavaSpringBoot为主,部分功能是PythonTornado,那么需要支持一个是跨域以及Options请求. Option请求 只需要跟处理get一样处理options请求就可以了.vue一般需要访问options方法, 如果报错则很难继续,所以只要通过就行了,当然需要其他逻辑就自己控制. #COM串口 class SerialHandler(BaseHandler): #处理GET请求 def get(self): self.writ
-
python tornado微信开发入门代码
本文实例为大家分享了python tornado微信开发的具体代码,供大家参考,具体内容如下 #微信入门代码 #!/usr/bin/env python2.7 # -*- coding: utf-8 -*- import tornado.ioloop import tornado.web import hashlib import xml.etree.ElementTree as ET import time def check_signature(signature, timestamp, n
-
python使用tornado实现登录和登出
本文实例为大家分享了tornado实现登录和登出的具体代码,供大家参考,具体内容如下 main.py如下: import tornado.httpserver import tornado.ioloop import tornado.web import tornado.options import os.path from tornado.options import define, options define("port", default=8000, help="ru
-
python用装饰器自动注册Tornado路由详解
第一个版本 在这个版本中,首先创建了 RouterConfig 对象,其构造方法创建了 tornado.web.Application() 并赋值为 self.Application ,在每个 Handler 上添加 @app.route 装饰器,对应的就是 RouterConfig 下面的 route 对象,其中 Handler 实例会被赋值到 handler 参数中,最后把 URL 和 Handler 对应关系添加到路由表中, URL 在每个 Handler 中创建的属性. #!/usr/b
-
深入解析Python的Tornado框架中内置的模板引擎
template中的_parse方法是模板文法的解析器,而这个文件中一坨一坨的各种node以及block,就是解析结果的承载者,也就是说在经过parse处理过后,我们输入的tornado的html模板就变成了各种block的集合. 这些block和node的祖宗就是这个"抽象"类, _Node,它定义了三个方法定义,其中generate方法是必须由子类提供实现的(所以我叫它"抽象"类). 理论上来说,当一个类成为祖宗类时,必定意味着这个类包含了一些在子类中通用的行
-
Python Tornado核心及相关原理详解
Tornado的核心是什么?Tornado 的核心是 ioloop 和 iostream 这两个模块,前者提供了 一个高效的 I/O 事件循环,后者则封装了 一个无阻塞的 socket . 通过向 ioloop 中添加网络 I/O 事件,利用无阻塞的 socket ,再搭配相应的回调函数,便可达到梦寐以求的高效异步执行. 一.Tornado简介 Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,由FriendFeed公司在自己的网
-
Python学习之直方图均衡化原理详解
目录 1.点算子 2.线性灰度变换 3.直方图均衡化 4.代码实战 1.点算子 点算子是两个像素灰度值间的映射关系,属于像素的逐点运算,相邻像素不参与运算.点算子是最简单的图像处理手段,如:亮度调整.对比度调整.颜色变换.直方图均衡化等等. 2.线性灰度变换 线性灰度变换表达为: 其中rk.sk分别为输入.输出点像素灰度值. ▲图2.1 线性灰度变换 当a>1时,输出图像像素灰度范围扩大,图像对比度增强,当a<1时反之.这是因为人眼不易区分相近的灰度值,因此若图像灰度值范围较小,观感上细节不够
-
python神经网络Batch Normalization底层原理详解
目录 什么是Batch Normalization Batch Normalization的计算公式 Bn层的好处 为什么要引入γ和β变量 Bn层的代码实现 什么是Batch Normalization Batch Normalization是神经网络中常用的层,解决了很多深度学习中遇到的问题,我们一起来学习一哈. Batch Normalization是由google提出的一种训练优化方法.参考论文:Batch Normalization Accelerating Deep Network T
-
python装饰器的特性原理详解
这篇文章主要介绍了python装饰器的特性原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天发现了装饰器的另一种用法,下面就先上代码: data_list = [] def data_item(func): data_list.append(func) return func @data_item def foo(): return 1 @data_item def foo1(): return 2 @data_item def fo
-
Python JSON编解码方式原理详解
这篇文章主要介绍了Python JSON编解码方式原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 概念 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写.在日常的工作中,应用范围极其广泛.这里就介绍python下它的两种编解码方法: 使用json函数 使用 JSON 函数需要导入 json 库:import json.函数含义: 源码解析: # coding= utf-8 #
-
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
本文实例讲述了Python开发SQLite3数据库相关操作.分享给大家供大家参考,具体如下: '''SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说 没有独立的维护进程,所有的维护都来自于程序本身. 在python中,使用sqlite3创建数据库的连接,当我们指定的数据库文件不存在的时候 连接对象会自动创建数据库文件:如果数据库文件已经存在,则连接对象不会再创建 数据库文件,而是直接打开该数据库文件. 连接对象可以是硬盘上面的数据库文件,也可以是建立在内存中的,在内存中的数据库
-
Python线程障碍对象Barrier原理详解
python线程Barrier俗称障碍对象,也称栅栏,也叫屏障. 一.线程障碍对象Barrier简介 # 导入线程模块 import threading # 障碍对象barrier barrier = threading.Barrier(parties, action=None, timeout=None) parties - 线程计数器,记录线程数量,也称线程障碍数量: action - 是一个可调用函数,当等待的线程到达了线程障碍数量parties,其中一个线程会首先调用action 对应函
-
JVM内存区域划分相关原理详解
学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分.在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程: 如上图所示,首先Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加
-
Python Django 数据库的相关操作详解
目录 前言 创建对象 方式一: 方式二: 更新对象 方式一: 方式二: 方式三: 查询 检索全部对象: 条件过滤: 方式一: 方式二: 检索单个对象: 总结 前言 上篇已经介绍过模型相关操作,并创建好了数据库及相关表字段,接下来将通过以下表在Django中进行表数据的增改查. from django.db import models class Student(models.Model): """ 学生表 """ name = models.Ch
-
Python中的延迟绑定原理详解
直接看下面例子 my_ld = [lambda x:x*i for i in range(3)] my_list = [ld(2) for ld in my_ld] print(my_list) 本想是想通过以上代码,输出[0, 2, 4]的,但结果却是[4, 4, 4] 下面说下本人对这个结果的理解: 因为Python解释器,遇到lambda(或者def),只是定义了一个匿名函数对象,并保存在内存中,只有等到调用这个匿名函数的时候,才会执行函数内部的代码(x*i).所以匿名函数中的i并不是立即
随机推荐
- jQuery validate验证插件使用详解
- vue-resource 拦截器使用详解
- Spring MVC url提交参数和获取参数
- 用jmSlip编写移动端顶部日历选择控件
- jquery中dom操作和事件的实例学习 下拉框应用
- thinkPHP模板算术运算相关函数用法分析
- Python数据分析之真实IP请求Pandas详解
- 根据Hibernte的cfg文件生成sql文件
- 简述MySQL 正则表达式
- 浅析javascript中的Event事件
- JS实现下拉菜单列表与登录注册弹窗效果
- html读出文本文件内容
- 计算字符串的长度的多种解决方案集锦
- java 字符串分割的三种方法(总结)
- Python 文件操作实现代码
- javascript 获取特定的 CSS属性值
- C#异步绑定数据实现方法
- Android仿ViVO X6 极速闪充动画效果
- 使用react实现手机号的数据同步显示功能的示例代码
- 详解eclipse将项目打包成jar文件的两种方法及问题解决方法