Django & Tornado 区别与界限

Python三大Web框架对比:Django、Flask、Tornado的异步实现方式详解 异步编程是一种能够让程序在等待某个任务(例如I/O操作)完成时,继续执行其他任务的编程方式。与传统的同步编程方式不同,异步编程不会阻塞主线程,它能够更高效地利用计算资源。在Web开发中,异步编程尤其适用于处理I/O密集型操作,比如数据库查询、文件读取、网络请求等。异步编程的好处在于能显著提升处理高并发请求的能力。Django是一个功能全面的Web框架,采用了MTV(Model-Template-View)架构,适合快速开发和开发大型Web应用。 阅读详情

Django 与 Tornado 各自的优缺点

Django

优点:

  • 大和全(重量级框架)
  • 自带orm,template,view 
  • 需要的功能也可以去找第三方的app
  • 注重高效开发
  • 全自动化的管理后台(只需要使用起ORM,做简单的定义,就能自动生成数据库结构,全功能的管理后台)
  • session功能

缺点:

  • template不怎么好用(来自自身的缺点)
  • 数据库用nosql不方便(来自自身的缺点)
  • 如果功能不多,容易臃肿

Tornado

优点:

  • 少而精(轻量级框架)
  • 注重性能优越,速度快
  • 解决高并发(请求处理是基于回调的非阻塞调用)
  • 异步非阻塞
  • websockets 长连接
  • 内嵌了HTTP服务器
  • 单线程的异步网络程序,默认启动时根据CPU数量运行多个实例;利用CPU多核的优势
  • 自定义模块

缺点:

  • 模板和数据库部分有很多第三方的模块可供选择,这样不利于封装为一个功能模块


总结:

要性能, Tornado 首选;要开发速度,Django 和 Flask 都行,区别是 Flask 把许多功能交给第三方库去完成了,因此 Flask 更为灵活。


综上所述:

Django适合初学者或者小团队的快速开发,适合做管理类、博客类网站、或者功能十分复杂需求十分多的网站

Tornado适合高度定制,适合访问量大,异步情况多的网站


Django 概述
Django 应该是最出名的python框架,Google App Engine甚至Erlang都有框架受它影响。
Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。
Django提供的方便,也意味着Django内置的ORM跟框架内的其他模块耦合程度高。
应用程序必须使用Django内置的ORM,否则就不能享受到框架内提供的种种基于其ORM的便利;理论上可以切换掉其ORM模块,但这就相当于要把装修完毕的房子拆除重新装修,倒不如一开始就去毛胚房做全新的装修。
Django的卖点是超高的开发效率,其性能扩展有限;采用Django的项目,在流量达到一定规模后,都需要对其进行重构,才能满足性能的要求。
Ruby的Rails也有类似的问题;以Twitter为例,推特到了今日的规模,不要说Rails,甚至是连Ruby都需要抛弃重来。
就我的感觉Django适用的是中小型的网站,或者是作为大型网站快速实现产品雏形的工具。

Tornado 概述
Tornado是Facebook开源出来的框架,其哲学跟Django近乎两个极端。Tornado是异步框架Tornado基本上只算有MVC中C这一层
Tornado走的是少而精的方向,它也有提供模板功能;虽然不鼓励,但作者是可以允许在模板进行少量编码的。
如果跟asp.net相比,Tornado有点类似仅实现了AsyncHttpHandler;除此之外,全部需要自己去实现。
好吧,其实它有模板,有国际化支持,甚至还有内置的OAuth/OpenID模块,方便做第三方登录,它其实也直接实现了Http服务器。
但它没有ORM(仅有一个mysql的超简单封装),甚至没有Session支持,更不要说Django那样自动化的后台。
假设是一个大型网站,在高性能的要求下,框架的各个部分往往都需要定制,可以复用的模块非常少;一个以Django开发的网站,各部分经过不断的定制,Django框架剩下的,很有可能也就是tornado一开始所能提供的这部分。
殊途同归。

===== HTTP服务器 =====
Tornado为了高效实现Comet/后端异步调用HTTP接口,是直接内嵌了HTTP服务器。
前端无需加apache / lighttpd / nginx等也可以供浏览器访问;但它并没有完整实现HTTP 1.1的协议,所以官方文档是推荐用户在生产环境下在前端使用nginx,后端反向代理到多个Tornado实例。
Tornado本身是单线程的异步网络程序,它默认启动时,会根据CPU数量运行多个实例;充分利用CPU多核的优势。

===== 单线程异步 =====
网站基本都会有数据库操作,而Tornado是单线程的,这意味着如果数据库查询返回过慢,整个服务器响应会被堵塞。
数据库查询,实质上也是远程的网络调用;理想情况下,是将这些操作也封装成为异步的;但Tornado对此并“没有”提供任何支持。
这是Tornado的“设计”,而不是缺陷。
一个系统,要满足高流量;是必须解决数据库查询速度问题的!
数据库若存在查询性能问题,整个系统无论如何优化,数据库都会是瓶颈,拖慢整个系统!
异步并**不能**从本质上提到系统的性能;它仅仅是避免多余的网络响应等待,以及切换线程的CPU耗费。
如果数据库查询响应太慢,需要解决的是数据库的性能问题;而不是调用数据库的前端Web应用。
对于实时返回的数据查询,理想情况下需要确保所有数据都在内存中,数据库硬盘IO应该为0;这样的查询才能足够快;而如果数据库查询足够快,那么前端web应用也就无将数据查询封装为异步的必要。
就算是使用协程,异步程序对于同步程序始终还是会提高复杂性;需要衡量的是处理这些额外复杂性是否值得。
如果后端有查询实在是太慢,无法绕过,Tornaod的建议是将这些查询在后端封装独立封装成为HTTP接口,然后使用Tornado内置的异步HTTP客户端进行调用。




Tornado异步框架深度解析:从事件循环到高并发实战 异步编程是现代高性能Web服务的核心技术,其核心思想是通过非阻塞I/O和事件驱动模型,让单线程在等待I/O操作时能够处理其他任务,从而极大提升服务器的并发处理能力。这种模型特别适合I/O密集型应用,如实时通信、API网关和高并发请求场景。Tornado作为Python生态中一个成熟且纯粹的异步网络框架,其核心价值在于原生、高效地解决了C10K乃至C100K问题。它通过事件循环(Event Loop)和IOLoop实现高效调度,并提供了基于协程的异步编程范式,让开发者能够以接近同步代码的清晰度编写高性能异步应 阅读详情

相关推荐

FLask企业登记信息数据管理系统

FLask企业登记信息数据管理系统

weixin_54707168的博客 826

Tornado vs Django选型分析

1. Tornado vs Django 整体思路就是列举收集到的框架优缺点,然后进行验证,从其他帖子收集到的优缺点汇总如下: Tornado: 优点:轻量、异步非阻塞IO处理方式、出色的抗负载能力、协程带来优异的处理性能 缺点:没有ORM,提供的支持和模板少,缺少后台支持,对小型项目来说开发速度没有django快 分析:tornado所谓的“缺点”是由它的设计理念决定的,设计上就决定它是一个小而精的http服务器+轻量级web框架,高并发处理才是它真正擅长的 Django: 优点:大而全的框架,..

kwame211的博客 1123

Flask集成的ERP系统Demo 该项目是一个基于Flask的Web版本ERP系统Demo,旨在实现企业信息管理的基础功能

### 项目名称:Flask集成的ERP系统Demo ### 项目简介: 该项目是一个基于Flask的Web版本ERP系统Demo,旨在实现企业信息管理的基础功能。系统主要功能包括表单填写、数据上传、数据查询和美化的数据库界面(增删改查功能)。该系统可以帮助企业有效地管理和查询各种信息,提高工作效率。 ### 主要功能: 1. **数据表导入导出:** - 支持上传企业调查表文件(如Excel文件),并将数据导入数据库。 - 支持导出当前数据或全部数据,便于数据备份和迁移。 2. **层级目录筛选公司信息:** - 通过层级目录筛选公司全部信息,包括文字和图片。 - 便于用户快速查找和管理企业信息。 3. **图片导入:** - 支持企业图片的导入和管理,增强信息展示的直观性。 4. **表单输入:** - 提供详细的表单输入功能,用户可以输入和更新企业信息。 ### 板块信息要求: 系统中的企业信息管理板块需要包含以下字段: - 单位名称 - 统一社会信用代码 - 运行状态(运行、停产、关闭) - 生产地址 - 联系人 - 联系方式

介绍两个Python web框架:Django & Tornado

在各种语言平台中,python涌现的web框架恐怕是最多的;猜想原因应该是在py中构造框架十分简单,使得轮子不断被发明。 这里记述一下我了解过的两个py web框架,供大家参考,希望能起他山之石的作用。 ====== Django ====== Django 应该是最出名的py框架,Google App Engine甚至Erlang都有框架受它影响。 Dj...

weixin_33948416的博客 716

差分音频转单端音频单电源方案

其中,芯片设计中的轨到轨输出(Rail-to-Rail Output) 是指通过特定的电路设计,使芯片(如运算放大器、驱动电路等)的输出电压能够达到或接近电源电压的上下极限(即“电源轨”),从而最大化信号的动态范围。最终,Vout=R2/R1*(Vin2−Vin1),即输出电压为输入电压差(Vin2−Vin1)乘以电阻比R2/R1。2、电阻:R1、R2、R3、R4是电路中的电阻,其中R1 = R3,R2 = R4。因R1=R3,R2=R4,且Vn=Vp,设R1=R3=R,R2=R4=kR。

电子绿洲的博客 4955

lidar点云比赛-Southlidar软件使用入门

lidar点云比赛-Southlidar软件使用入门 广西高校重点实验室培训基地 系统控制与信息处理重点实验室 本篇博客来自河池学院: 智控无人机小组 写作时间:2020.09.29 一、软件资源及安装 1.下载地址: https://pan.baidu.com/s/1jN1pynmAZOqj5mMx774pVg 提取码:gkvv (资源来自南方测绘) 2.安装 进入链接,找到软件文件夹, 内含文件即为安装包 3.下载成功后按提示安装即可 4.安装成功后桌面自动创建一个快捷方式 二、界面布

qq_49621416的博客 4891

python 部分框架面试题整理(4)

谈一下你对 uWSGI 和 nginx 的理解? 1.uWSGI 是一个 Web 服务器,它实现了 WSGI 协议、uwsgi、http 等协议。Nginx 中 HttpUwsgiModule 的作用是与 uWSGI 服务器进行交换。WSGI 是一种 Web 服务器网关接口。它是一个...

chouzong1708的博客 109

lift off工艺为什么常用蒸发的方式镀膜?

电子束蒸发中,蒸发物质从源头直接升华并沿直线路径沉积到晶圆上,它可以避免金属在掩模侧壁的覆盖,只在表面进行沉积。在镀膜结束后,在进行光刻胶剥离时,去胶液无法与光刻胶接触反应,导致光刻胶剥离很困难。欢迎加入我的半导体制造知识星球社区,目前社区有1900人左右。我观察到晶圆厂中lift off工艺,镀膜都是用的电子束蒸发的方式,很少有用磁控溅射的方式,为什么?需要增加撕胶工序,将胶面上覆盖的膜层撕掉,使光刻胶露出,这样才容易剥离。上图为磁控溅射的膜层截面图,去胶液很难突破侧壁膜层,进行反应。

1685

python中的tornado框架和Django框架的区别

1,tornado:是python编写的web服务器兼容web应用的框架。 tornado的优势 (1),轻量级的web框架 (2),他提供了一种带有异步功能并允许他扩展到大量开放连接的简单的web框架。 (3),出色的坑负载能力 (4),优异的处理性能,不依赖多线程/多进程。 (5),wsgi全栈替代产品,推荐同时使用其web框架和http服务器。 2,Django框架 ...

658

python sci sci-hub 爬论文

sci-hub 爬虫 后续加入对于时间的排序,下载最新文献 参考: https://www.guanjihuan.com/archives/6846 https://blog.youkuaiyun.com/czh2637750821/article/details/115508922

weixin_42783619的博客 3541

基于物联网设计的蜂箱智能监测系统设计

为解决传统养蜂业依赖人工、管理效率低下、干扰蜂群等问题,本项目设计并实现了一套基于物联网(IoT)的蜂箱智能监测系统。

682

Django/Flask/Tornado三大web框架性能分析

写在前面:本文的数据涉及到之前遇到过的问题,大概一次 http 请求到收到响应需要多少时间。这个问题在实际工作中与框架有比较大的关系,因此特别就框架的性能做了一次分析。这...

IT派 2万+

通俗范畴论10 泛性质(MD版)

既然泛性质可以在同构意义下唯一确定一个泛构造,那么我们就可以用泛性质来定义泛构造。我们回顾一下已经掌握的泛性质和泛构造。泛性质其实我们并不陌生,始对象和终对象,就是具有泛性质的对象,一个具有“始”的泛性质,一个具有“终”的泛性质。比如始对象,如果一个范畴里面有始对象,它到所有对象都有且只有一个态射,这样的对象可能有两个么?嗯,还真可能,但是这两个始对象同构,所以在同构意义下,它们可以看成一个,因此在同构意义下,始对象是唯一的。同理,终对象也一样。同构的始对象。

RockTec的专栏 478

2-Django、Flask和Tornado三大主流框架对比

在Python的web开发框架中,目前使用量最高的几个是DjangoFlask和Tornado, 经常会有人拿这几个对比,相信大家的初步印象应该是Django大而全、Flask小而精、Tornado性能高。

linjun的博客 3878

29、机器人动力学中的欧拉 - 拉格朗日与哈密顿力学

本文深入探讨了机器人动力学中的欧拉-拉格朗日与哈密顿力学框架,涵盖向量流形上的辛结构、哈密顿方程的几何代数表述、泊松括号与积分不变量等核心概念。文章详细推导了机电系统中拉格朗日量与哈密顿量的构建方法,并结合牛顿-欧拉算法给出了局部哈密顿量和动量导数的迭代计算流程,适用于多关节机器人的动力学建模与控制设计。通过应用案例展示了理论在双关节机器人手臂中的实际运用,最后展望了其在优化控制、鲁棒性提升及智能融合方向的潜力。

perl8的博客 129

使用epiDisplay包中的logistic

其中的logistic.display函数可以用于获取逻辑回归模型的汇总统计信息,包括自变量的优势比和置信区间,以及回归系数的Wald检验的p值。最后,我们使用print函数打印出汇总统计信息。使用epiDisplay包中的logistic.display函数获取逻辑回归模型的汇总统计信息(包括自变量的初始和调整后的优势比及置信区间,回归系数的Wald检验的p值)- R语言。通过使用logistic.display函数,我们可以方便地获取逻辑回归模型的重要统计信息,并对自变量的影响进行解释和推断。

CyberJolt的博客 607

Python:Django 和 Tornado 的关系

Django 和 Tornado 是两个用于 Python 编程语言的非常流行的 web 框架,但它们在设计理念、应用场景和性能特性上有显著的不同。

sheji888的专栏 937

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

odoo初步认知

## odoo的初步认知 这是我在python这一方向的新探索。odoo是一种基于python的一种框架吧(有一部分人的理解不同,在这里我们就认为odoo是一种框架)。 先介绍一下本人在python方面工作近三年时间,之前主要使用Django,flask框架来开发web端。最近由于工作关系学习odoo。首先说一下本人对odoo的使用体感。首先odoo与Django,flask等完全不同。第一次接触会感到很多的不适,odoo就仿佛是桃花园记里的桃源与世隔绝。从对数据...

weixin_45753544的博客 846

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

odoo小结

这两天一直在研究odoo,因为之前一直从事的是django,flask这种框架的开发。对于erp还是一个很模糊的印象,大致是很麻烦的,利用xml去交互数据的一些片段。 知道自己真正的去学习了odoo,才感觉自己的理解并不正确。首先odoo他和之前我使用过的框架并不相同,他将mvc的机制运行的很透彻,业务层和数据层完全分离。一开始我是摸不着头脑的,因为我之前并没有接触过这类架构。之前django也...

黄油猫 7723

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

python网络框架——Django、Tornado、Flask和Twisted

Django、Tornado和flask是全栈网络框架,而Twisted更专注于网络底层的高性能封装,不提供HTML模版引擎等界面功能,因此不能称为全栈框架。

weixin_42209537的博客 2086

Django框架和Tornado框架的区别

在众多语言开发中,python涌现的web框架恐怕是最多的 Django Django 应该是最出名的python框架,Google App Engine甚至Erlang都有框架受它影响。 Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。 Django提供的方便,也意味着Django内置的...

Best_fish的博客 1734

django开发-django和tornado的不同

python中常用的几个web框架有django, tornado, flask等,今天来总结一下django和tornado的不同。工作中django和tornado都用过,使用django相对更多一些。个人感觉django虽然好用,有搭建项目快、自带ORM、自动生成路由、自带管理后台等优势;但若实际工作中选择,我还是会偏向于使用tor...

weixin_33693070的博客 559

Flask介绍

一、简介 Flask得核心在于werkzeug(路由模块),jinja2模板引擎 类比Django:路由、模板、ORM Flask要完成功能,依赖于丰富的插件(扩展模块) 常用问题:Django和Flask有什么区别? 二、环境搭建 virtualenvwrapper来创建、管理我们的虚拟环境 开发中,我们一个项目是要对应应虚拟环境的 1、安装 虚拟环境 pip install virtualenvwrapper-win 2、配置虚拟环境主目录 在windows上环境变量中添加 环境变

P1__3的博客 2066

python web服务框架-Python 四大主流 Web 编程框架

Python 四大主流 Web 编程框架目前Python的网络编程框架已经多达几十个,逐个学习它们显然不现实。但这些框架在系统架构和运行环境中有很多共通之处,本文带领读者学习基于Python网络框架开发的常用知识,及目前的4种主流Python网络框架:Django、Tornado、Flask、Twisted。网络框架及MVC架构所谓网络框架是指这样的一组Python包,它能够使开发者专注于网站应用...

weixin_37988176的博客 1018

ODOO学习笔记(3):Odoo和Django的区别是什么?

Django有一个非常庞大的社区,提供了大量的第三方包和插件,这些可以通过Python包索引(PyPI)获取。:Odoo采用了模块化架构,每个模块提供特定的功能,可以单独安装或卸载。Odoo的后端使用XML, JS, HTML等技术,前端则使用QWeb,这是一种类似于Jinja2的模板语言。总的来说,如果你需要一个完整的ERP系统,Odoo可能是一个更好的选择。:Odoo有一个活跃的社区,提供了大量的第三方模块和应用,这些模块可以扩展Odoo的功能。Odoo的社区主要由企业用户和开发者组成。

软件行业技术文化交流。 1047
上一篇: 进程间通信(IPC)介绍
下一篇: MySQL、MongoDB、Redis 数据库之间的区别
喵星人Xcode
博客等级 码龄11年 235粉丝 141原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值