tornado

Python的框架可以用来做什么Python的应用方向
1. 常规软件开发
Python支持函数式编程和OOP面向对象编程,能够承担任何种类软件的开发工作 , 因此常规的软件开发、脚本编写、网络编程等都属于标配能力 。
2. 科学计算
随着NumPy, SciPy, Matplotlib, Enthought librarys等众多程序库的开发,Python越来越适合于做科学计算、绘制高质量的2D和3D图像 。和科学计算领域最流行的商业软件Matlab相比 , Python是一门通用的程序设计语言 , 比Matlab所采用的脚本语言的应用范围更广泛,有更多的程序库的支持 。虽然Matlab中的许多高级功能和toolbox目前还是无法替代的 , 不过在日常的科研开发之中仍然有很多的工作是可以用Python代劳的 。
3. 自动化运维
这几乎是Python应用的自留地,作为运维工程师首选的编程语言,Python在自动化运维方面已经深入人心,比如Saltstack和Ansible都是大名鼎鼎的自动化平台 。
4. 云计算
开源云计算解决方案OpenStack就是基于Python开发的,搞云计算的同学都懂的 。
5. WEB开发
基于Python的Web开发框架不要太多,比如耳熟能详的Django,还有Tornado,Flask 。其中的Python+Django架构,应用范围非常广,开发速度非常快 , 学习门槛也很低 , 能够帮助你快速的搭建起可用的WEB服务 。
6. 网络爬虫
也称网络蜘蛛,是大数据行业获取数据的核心工具 。没有网络爬虫自动地、不分昼夜地、高智能地在互联网上爬取免费的数据,那些大数据相关的公司恐怕要少四分之三 。能够编写网络爬虫的编程语言有不少,但Python绝对是其中的主流之一,其Scripy爬虫框架应用非常广泛 。
7. 数据分析
在大量数据的基础上,结合科学计算、机器学习等技术,对数据进行清洗、去重、规格化和针对性的分析是大数据行业的基石 。Python是数据分析的主流语言之一 。
8. 人工智能
Python在人工智能大范畴领域内的机器学习、神经网络、深度学习等方面都是主流的编程语言,得到广泛的支持和应用 。
当然,除了以上的主流和前沿领域,Python还在其他传统或特殊行业起着重要的作用 。

Python主要用于什么开发Python可以做什么开发?从业方向有哪些?
·1、软件开发:Python语言支持多函数编程 , 可以担任任何软件的开发工作,是它的标配能力 。
2、科学计算:Python是一门通用的程序设计语言,比Matlab所采用的脚本语言的应用范围更广泛 , 有更多的程序库的支持,做科学计算是非常合适的选择 。
3、自动化运维:Python是作为运维工程师的首选编程语言,有诸多优势所在,是非常受喜欢的编程语言 。
4、云计算:开源云计算解决方案OpenStack就是基于Python开发的 。
5、web开发:基于Python的Web开发框架不要太多,比如耳熟能详的Django,还有Tornado,Flask 。
6、网络爬虫:也称网络蜘蛛 , 是大数据行业获取数据的核心工具 。能够编写网络爬虫的编程语言有不少,但Python绝对是其中的主流之一 。
7、数据分析:结合科学计算、机器学习等技术,对数据进行清洗、去重、规格化和针对性的分析是大数据行业的基石 , Python是数据分析领域首选的编程语言 。
8、人工智能:对于人工智能我想不用多介绍,是现在非常流行的一个行业 , 而人工智能也是未来的发展 , Python是人工智能的首选编程语言 。

学Python能干什么?从入门级选手到专业级选手都在做的——爬虫 。用Python写爬虫的教程网上一捉一大把,据我所知很多初学Python的人都是使用它编写爬虫程序,小到捉取一个小黄图网站,大到一个互联网公司的商业应用 。通常Python入门爬虫比较简单学,不需要在一开始掌握太多太基础太底层的知识就可以很快上手,而且很快就可以做出成果 , 非常适合小白一开始想做出点看得见的东西的成就感 。除了入门,爬虫也被广泛应用到一些需要数据的公司、平台和组织,通过抓取互联网上的公开数据,来实现一些商业价值是非常常见的做法 。当然这些选手的爬虫就要厉害的多了,需要处理包括路由、存储、分布式计算等很多问题 , 与小白的抓黄图小程序,复杂程度差了很多倍 。Web 程序除了爬虫,Python 也广泛应用到了 Web 端程序,比如你现在正在使用的知乎,主站后台就是基于 Python 的 tornado 框架 , 豆瓣的后台也是基于 Python 。除了 tornado (Tornado Web Server),Python 常用的 Web 框架还有 Flask(Welcome | Flask (A Python Microframework)),Django (The Web framework for perfectionists with deadlines) 等等 。通过上述框架,你可以很方便实现一个 Web 程序,比如我认识的一些朋友,就通过 Python 自己编写了自己的博客程序,包括之前的 zhihu.photo , 我就是通过 Flask 实现的后台(出于版权等原因,我已经停掉了这个网站) 。除了上述框架,你也可以尝试自己实现一个 Web 框架 。人工智能(AI)与机器学习人工智能是现在非常火的一个方向 , AI热潮让Python语言的未来充满了无限的潜力 。现在释放出来的几个非常有影响力的AI框架,大多是Python的实现 , 为什么呢?因为Python足够动态、具有足够性能 , 这是AI技术所需要的技术特点 。比如基于Python的深度学习库、深度学习方向、机器学习方向、自然语言处理方向的一些网站基本都是通过Python来实现的 。机器学习 , 尤其是现在火爆的深度学习 , 其工具框架大都提供了Python接口 。Python在科学计算领域一直有着较好的声誉,其简洁清晰的语法以及丰富的计算工具,深受此领域开发者喜爱 。早在深度学习以及Tensorflow等框架流行之前,Python中即有scikit-learn,能够很方便地完成几乎所有机器学习模型,从经典数据集下载到构建模型只需要简单的几行代码 。配合Pandas、matplotlib等工具,能很简单地进行调整 。而Tensorflow、PyTorch、MXNet、Keras等深度学习框架更是极大地拓展了机器学习的可能 。使用Keras编写一个手写数字识别的深度学习网络仅仅需要寥寥数十行代码,即可借助底层实现,方便地调用包括GPU在内的大量资源完成工作 。值得一提的是,无论什么框架,Python只是作为前端描述用的语言 , 实际计算则是通过底层的C/C++实现 。由于Python能很方便地引入和使用C/C++项目和库,从而实现功能和性能上的扩展,这样的大规模计算中,让开发者更关注逻辑于数据本身,而从内存分配等繁杂工作中解放出来,是Python被广泛应用到机器学习领域的重要原因 。科学计算Python 的开发效率很高 , 性能要求较高的模块可以用 C 改写,Python 调用 。同时,Python 可以更高层次的抽象问题,所以在科学计算领域也非常热门 。包括 scipy、numpy 等用于科学计算的第三方库的出现,更是方便了又一定数学基?。羌扑慊∫话愕呐笥?。
python网络编程可以用来做什么1. Web开发
最火的Python web框架Django,支持异步高并发的Tornado框架 , 短小精悍的flask,bottle,Django官方的标语把Django定义为the framework for perfectionist with deadlines(大意是一个为完全主义者开发的高效率web框架)
2. 网络编程
支持高并发的Twisted网络框架,py3引入的asyncio使异步编程变的非常简单
3. 爬虫开发
爬虫领域,Python几乎是霸主地位,Scrapy/Request/BeautifuSoap/urllib等,想爬啥就爬啥
4. 云计算开发
目前最火最知名的云计算框架就是OpenStack,Python现在的火,很大一部分就是因为云计算市场近几年的爆发
5. 人工智能
MASA和Google早期大量使用Python,为什么Python积累了丰富的科学运算库,当AI时代来临后,Python从众多编程语言中脱颖而出,各种人工智能算法都基于Python编写 , 由其PyTorch之后,Python作为AI时代头牌语言的位置基本确立!
6. 自动化运维
问问中国的每个运维人员,运维人员必须会的语言是什么?10个人详细会给你一个相同的答案,它的名字叫Python
7. 金融分析
金融公司使用的很多分析程序、高频交易软件就是用的Python,目前,Python是金融分析、量化交易领域里用的最多的语言
8. 科学运算
97年开始,NASA就在大量使用Python在进行各种复杂的科学运算,随着NumPy,SciPy,Matplotlib,Enthought librarys等众多程序库的开发 , 使得Python越来越适合做科学计算、绘制高质量的2D和3D图像 。和科学计算领域最流行的商业软件Matlab相比 , Python是一门通用的程序设计语言 , 比Matlab所采用的脚本语言的应用范围更广泛
9. 游戏开发
在网络游戏开发中Python也有很多应用 。相比Lua or C++,Python比Lua有更高阶的抽象能力 , 可以用更少的代码描述游戏业务逻辑 , 与Lua相比,Python更适合作为一种Host语言 , 即程序的入口点是在Python那一端会比较好,然后用C/C++在非常必要的时候写一些扩展 。Python非常适合编写1万行以上的项目,而且能够很好的把网游项目的规模控制在10万行代码以内 。
10. 桌面软件
虽然大家很少使用桌面软件了 , 但是Python在图形界面开发上也很强大,你可以用tkinter/PyQT框架开发各种桌面软件!

知乎为什么选择 Tornado 作为 Web 开发框架Tornado不仅仅是Web框架,它实现了异步非阻塞的I/O模型 。这个特性的优势体现在对大量Comet长轮询连接的维护上 。这也是FriendFeed开发Tornado的原因-----因为FriendFeed需要实时更新Timeline,而Comet又是目前最好,最流行的方法 。由于知乎在开发

知乎为什么选择 Tornado 作为 Web 开发框架Tornado 开发优势:主要是Tornado基于Python,一来代码量少开发速度快 , 二来采用epoll方式,能够承载的并发量很高 。不连接数据库的情况下,单用get生成页面,大概平均的并发量在7900左右,比PHP或者Java能够承载并发量都高很多很多 。可维护性相对来说比php好很多,语法结构清晰 。其他补充:tornado入门不是很难,只要理解了他处理的方式就很好做了 。tornado在处理网页的时候,针对于URL的连接,实际就是对class类的一个路由映射 。而类中的方法通常无非就两种 , 处理连接请求的get或者post 。所以tornado的页面编写很简单 。
知乎为什么选择 Tornado 作为 Web 开发框架iendFeed开发Tornado的原因-----因为FriendFeed需要实时更新Timeline,而Comet又是目前最好,最流行的方法 。由于知乎也有大量长轮询连接需要维护,
所以选择Tornado也就在情理之中了 。
Tornado不是万金油,由于Tornado的WEB服务器为单线程,
一个Request如果阻塞了I/O,那么这个进程将一直挂起,既无法接受新的Request,
也无法Finish正在阻塞的其它Request 。虽然可以Spawn多个Tornado进程,但是进程这种重量级的东西 , Spawn太多会消耗大量的内存资源 。这种感觉很像PHP的FastCGI进程那种味道 。
所以如果是会阻塞I/O的Request一般都是利用Tornado内置的异步HTTP Client

知乎为什么选择 Tornado 作为 Web 开发框架这也是FriendFeed开发Tornado的原因-----因为FriendFeed需要实时更新Timeline,而Comet又是目前最好 , 最流行的方法 。由于知乎也有大量长轮询连接需要维护 , 
所以选择Tornado也就在情理之中了 。
但是我们也要看到,Tornado不是万金油,由于Tornado的WEB服务器为单线程 , 
一个Request如果阻塞了I/O , 那么这个进程将一直挂起,既无法接受新的Request,
也无法Finish正在阻塞的其它Request 。虽然可以Spawn多个Tornado进程,但是进程这种重量级的东西,Spawn太多会消耗大量的内存资源 。这种感觉很像PHP的FastCGI进程那种味道 。
所以如果是会阻塞I/O的Request一般都是利用Tornado内置的异步HTTP Client
交给其它动态后端来做 。
所以Tornado在生产中一般前面都要包一层nginx做反向代理,用nginx来做静态文件等大数据量的I/O操作 。Tornado的I/O时间实在是太金贵了,在这上面耗不起 。
至于你提到的Tornado文档少的问题 , 我觉得你可以抽空阅读一下Tornado的代码 , 
毕竟是个轻量级框架,代码不多,但是注释却很详细,很容易看懂 。
请记?。?代码永远是最好的文档!

知乎为什么选择 Tornado 作为 Web 开发框架tornado有性能优势吧异步非阻塞

看了一下quora,正常的请求是pylons,一些实时性的内容用的也是tornado

tornado是什么意思?。?/h3> TornadoTornado代表嵌入实时应用中最新一代的开发和执行环境 。
Tornado 包含三个完整的部分:
 ?。?)Tornado系列工具, 一套位于主机或目标机上强大的交互式开发工具和使用程序;
 ?。?)VxWorks 系统, 目标板上高性能可扩展的实时操作系统;
 ?。?)可选用的连接主机和目标机的通讯软件包 如以太网、串行线、在线仿真器或ROM仿真器.
Tornado的独特之处在于其所有开发工具能够使用在应用开发的任意阶段以及任何档次的硬件资源上 。而且, 完整集的Tornado工具可以使开发人员完全不用考虑与目标连接的策略或目标存储区大小 。
Tornado 结构的专门设计为开发人员和第三方工具厂商提供了一个开放环境 。已有部分应用程序接口可以利用并附带参考书目,内容从开发环境接口到连接实现 。
Tornado包括强大的开发和调试工具, 尤其适用于面对大量问题的嵌入式开发人员 。这些工具包括C和C++远程源级调试器, 目标和工具管理, 系统目标跟踪, 内存使用分析和自动配置. 另外,所有工具能很方便地同时运行,很容易增加和交互式开发 。
VxWorks支持广泛的工业标准如POSIX 1003.1b实时扩展, ANSI C (浮点支持) and TCP/IP 网络协议. 这些标准促进多种不同产品间的互用性, 提升了可移植性, 保护用户在开发和培训方面的投资 。
VxWorks具备一个高效的微内核 。微内核支持实时系统的一系列特征包括多任务 , 中断支持,任务抢占式调度和循环调度 。微内核设计使VxWorks缩减了系统开销并加速了对外部事件的反应 。内核的运行非常快速和确定,例如, 在68K处理器上上下文切换仅需要3.8微秒 。中断等待时间少于3微秒 。
VxWorks 具有可伸缩性, 开发人员能按照应用需求分配所需的资源,而不是为操作系统分配资源 。从需要几K字节存储区的嵌入设计到需求更多的操作系统功能的复杂的高端实时应用, 开发人员可任意选择多达80种不同的配置 。
Tornado: IDS“狂风”战斗机 , 于l969年3月 , 由英国、德国和意大利三国联合成立的帕那维亚飞机公司设计 。
“狂风”战斗机是为适应北约组织对付突发事件的“灵活反应”战略思想而研制的,主要用来代替F-4、F-104、“火神”、“坎培拉”、“掠夺者”等战斗机和轰炸机,执行截击、攻击等常规作战任务 。“狂风”战斗机为串列双座 , 两侧“狂风”机翼为可变后掠悬臂式上单翼 。机翼翼根段为固定段,其前线后掠角为60度;活动段后掠角可由人工控制在25度至67度间变化 , 带全翼展襟副翼及前缘缝翼 。
该机无论是在昼间、夜间和复杂天气条件 , 也无论是以高速或低速飞行 , 它都投放各种精确武器 。其拥有的高精度攻击武器和精确导航系统,可保证它有效攻击隐藏在浓雾中的目标,或者有效攻击那些以高速飞行的低噪音和低振动强度的目标 。
机上有先进的地形自动跟踪系统 , 可保证飞机在低空以跨音速突防 。该机装有2门27毫米口径“毛瑟”机炮,可各备弹188发 。还设有7个外挂架 , 机身下3个,两翼下各2个 。
基本技术数据:
翼展:(后掠角25度)13.91米,(后掠角67度)8.60米
机长:(IDS/ECR)16.72米,(ADV)18.68米
机高:5.95米
机翼面积:26.6平方米
空重:(IDS)14090千克,(ADV)14500千克
最大载弹弹量:(IDS)9000千克,(ADV)8500千克
最大起飞重量:27950千克
最大平飞速度:(高空、无外挂)M2.2,(有外挂)M有0有92
着陆速度:213千米/小时
作战半径:(带重武器,高-低-高)1390千米
转场航程:3890千米
限制过载:+7.5g

如何理解 Tornado假设你还不知道Tornado是什么也不知道为什么应该对它感兴趣,那我将用简短的话来介绍Tornado这个项目 。如果你已经对它有了兴趣,你可以跳去看下一节内容 。
Tornado是一个用Python编写的异步HTTP服务器,同时也是一个web开发框架 。该框架服务于FriendFeed网站,最近Facebook也在使用它 。FriendFeed网站有用户数多和应用实时性强的特点,所以性能和可扩展性是很受重视的 。由于现在它是开源的了(这得归功于Facebook),我们可以彻底的对它是如何工作的一探究竟 。
我觉得对非阻塞式IO (nonblocking IO) 和异步IO (asynchronous IOAIO)很有必要谈一谈 。如果你已经完全知道他们是什么了,可以跳去看下一节 。我尽可能的使用一些例子来说明它们是什么 。
让我们假设你正在写一个需要请求一些来自其他服务器上的数据(比如数据库服务,再比如新浪微博的open api)的应用程序 , 然后呢这些请求将花费一个比较长的时间,假设需要花费5秒钟 。大多数的web开发框架中处理请求的代码大概长这样:
def handler_request(self, request):
answ = self.remote_server.query(request) # this takes 5 seconds
request.write_response(answ)
如果这些代码运行在单个线程中,你的服务器只能每5秒接收一个客户端的请求 。在这5秒钟的时间里,服务器不能干其他任何事情,所以,你的服务效率是每秒0.2个请求,哦,这太糟糕了 。
当然,没人那么天真,大部分服务器会使用多线程技术来让服务器一次接收多个客户端的请求,我们假设你有20个线程 , 你将在性能上获得20倍的提高,所以现在你的服务器效率是每秒接受4个请求,但这还是太低了,当然,你可以通过不断地提高线程的数量来解决这个问题,但是,线程在内存和调度方面的开销是昂贵的,我怀疑如果你使用这种提高线程数量的方式将永远不可能达到每秒100个请求的效率 。
如果使用AIO,达到每秒上千个请求的效率是非常轻松的事情 。服务器请求处理的代码将被改成这样:
def handler_request(self, request):
self.remote_server.query_async(request, self.response_received)
def response_received(self, request, answ):# this is called 5 seconds later
request.write(answ)
AIO的思想是当我们在等待结果的时候不阻塞 , 转而我们给框架一个回调函数作为参数,让框架在有结果的时候通过回调函数通知我们 。这样,服务器就可以被解放去接受其他客户端的请求了 。
然而这也是AIO不太好的地方:代码有点不直观了 。还有,如果你使用像Tornado这样的单线程AIO服务器软件 , 你需要时刻小心不要去阻塞什么,因为所有本该在当前返回的请求都会像上述处理那样被延迟返回 。
关于异步IO,比当前这篇过分简单的介绍更好的学习资料请看 The C10K problem 。
源代码
该项目由github托管,你可以通过如下命令获得,虽然通过阅读这篇文章你也可以不需要它是吧 。
git clone git://github.com/facebook/tornado.git
在tornado的子目录中,每个模块都应该有一个.py文件 , 你可以通过检查他们来判断你是否从已经从代码仓库中完整的迁出了项目 。在每个源代码的文件中,你都可以发现至少一个大段落的用来解释该模块的doc string,doc string中给出了一到两个关于如何使用该模块的例子 。
IOLoop模块
让我们通过查看ioloop.py文件直接进入服务器的核心 。这个模块是异步机制的核心 。它包含了一系列已经打开的文件描述符(译者:也就是文件指针)和每个描述符的处理器(handlers) 。它的功能是选择那些已经准备好读写的文件描述符,然后调用它们各自的处理器(一种IO多路复用的实现,其实就是socket众多IO模型中的select模型,在Java中就是NIO,译者注) 。
可以通过调用add_handler()方法将一个socket加入IO循环中:
def add_handler(self, fd, handler, events):
"""Registers the given handler to receive the given events for fd."""
self._handlers[fd] = handler
self._impl.register(fd, events | self.ERROR)
_handlers这个字典类型的变量保存着文件描述符(其实就是socket,译者注)到当该文件描述符准备好时需要调用的方法的映射(在Tornado中,该方法被称为处理器) 。然后,文件描述符被注册到epoll(unix中的一种IO轮询机制,貌似,译者注)列表中 。Tornado关心三种类型的事件(指发生在文件描述上的事件,译者注):READ,WRITE 和 ERROR 。正如你所见,ERROR是默认为你自动添加的 。
self._impl是select.epoll()和selet.select()两者中的一个 。我们稍后将看到Tornado是如何在它们之间进行选择的 。
现在让我们来看看实际的主循环,不知何故,这段代码被放在了start()方法中:

def start(self):
"""Starts the I/O loop.
The loop will run until one of the I/O handlers calls stop(), which
will make the loop stop after the current event iteration completes.
"""
self._running = True
while True:
[ ... ]
if not self._running:
break
[ ... ]
try:
event_pairs = self._impl.poll(poll_timeout)
except Exception, e:
if e.args == (4, "Interrupted system call"):
logging.warning("Interrupted system call", exc_info=1)
continue
else:
raise
# Pop one fd at a time from the set of pending fds and run
# its handler. Since that handler may perform actions on
# other file descriptors, there may be reentrant calls to
# this IOLoop that update self._events
self._events.update(event_pairs)
while self._events:
fd, events = self._events.popitem()
try:
self._handlers[fd](fd, events)
except KeyboardInterrupt:
raise
except OSError, e:
if e[0] == errno.EPIPE:
# Happens when the client closes the connection
pass
else:
logging.error("Exception in I/O handler for fd %d",
fd, exc_info=True)
except:
logging.error("Exception in I/O handler for fd %d",
fd, exc_info=True)

poll()方法返回一个形如(fd: events)的键值对,并赋值给event_pairs变量 。由于当一个信号在任何一个事件发生前到来时,C函数库中的poll()方法会返回EINTR(实际是一个值为4的数值),所以"Interrupted system call"这个特殊的异常需要被捕获 。更详细的请查看man poll 。
在内部的while循环中,event_pairs中的内容被一个一个的取出 , 然后相应的处理器会被调用 。pipe 异常在这里默认不进行处理 。为了让这个类适应更一般的情况,在http处理器中处理这个异常是一个更好的方案,但是选择现在这样处理或许是因为更容易一些 。
注释中解释了为什么使用字典的popitem()方法,而不是使用更普遍一点的下面这种做法(指使用迭代 , 译者注):
for fd, events in self._events.items():
原因很简单 , 在主循环期间 , 这个_events字典变量可能会被处理器所修改 。比如remove_handler()处理器 。这个方法把fd(即文件描述符 , 译者注)从_events字典中取出(extracts,意思是取出并从_events中删除,译者注),所以即使fd被选择到了 , 它的处理器也不会被调用(作者的意思是,如果使用for迭代循环_events , 那么在迭代期间_events就不能被修改,否则会产生不可预计的错误,比如,明明调用了remove_handler()方法删除了某个键值对,但是该handler还是被调用了 , 译者注) 。

python 的tornado主要用来做什么?一个用Python写的相对简单的、可扩展、非阻塞的Web服务器架构,以处理上万的同时的连接口,让实时的Web服务通畅起来 。跟现在一些用Python写的Web架构相似,比如Django , 但更注重速度,能够处理海量的同时发生的流量

TORNADO是什么轮胎的标志轮胎? 恶搞吧

路亚竿TORNADOV中文是什么意思TORNADO是龙卷风;飓风;旋风的意思,所以TORNADOV取名是这个意思 。

如何阻止tornadoWeb服务器下面简单的例子存在tornado的网页上:import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") application = tornado.web.Applicatio

python tornado写的web服务器脚本,运行时每过一会儿都会发出如下警告,这是怎么回事儿? 该如何解决?这个地址是肯定存在的,因为我直接点击访问都有响应 。。。好好检查一下程序里为啥会访问这个地址吧 。
知乎为什么选择 Tornado 作为 Web 开发框架您好,很高兴能帮助您
这也是FriendFeed开发Tornado的原因-----因为FriendFeed需要实时更新Timeline,而Comet又是目前最好 , 最流行的方法 。由于知乎也有大量长轮询连接需要维护,
所以选择Tornado也就在情理之中了 。
但是我们也要看到 , Tornado不是万金油,由于Tornado的WEB服务器为单线程,
一个Request如果阻塞了I/O,那么这个进程将一直挂起,既无法接受新的Request,
也无法Finish正在阻塞的其它Request 。虽然可以Spawn多个Tornado进程,但是进程这种重量级的东西,Spawn太多会消耗大量的内存资源 。这种感觉很像PHP的FastCGI进程那种味道 。
所以如果是会阻塞I/O的Request一般都是利用Tornado内置的异步HTTP Client
交给其它动态后端来做 。
所以Tornado在生产中一般前面都要包一层nginx做反向代理,用nginx来做静态文件等大数据量的I/O操作 。Tornado的I/O时间实在是太金贵了 , 在这上面耗不起 。
至于你提到的Tornado文档少的问题,我觉得你可以抽空阅读一下Tornado的代码 , 
毕竟是个轻量级框架,代码不多 , 但是注释却很详细 , 很容易看懂 。
请记住 , 代码永远是最好的文档!

你的采纳是我前进的动力 , 
记得好评和采纳,答题不易,互相帮助,

python如何去除tornado地址中的\\ , 服务器请求中replace不管用题目中的‘\’为什么不一样?

如何用tornado快速开发服务器Tornado是 FriendFeed使用的可扩展的非阻塞式 web服务器及其相关工具的开源版本 。

tornado python 用命令行运行.py文件127.0.0.1:8888可以访问,关掉命令行就不能访问如果游戏服务器停机你能上游戏吗? 一个道理嘛, 命令行运行那个文件,就相当于启动了服务器, 你把命令行关了,就相当于把服务器关了, 当然就不能访问127.0.0.1:8888
(P.S:这问题也太...'二' 了, 能给你回答的都是真爱啊~~~)

Tornado通过命令行编译vxworks映像时如何去掉1. 假设Tornado装在d盘tornado目录下
2. 假设使用gnu编译生成tornado映像
3. 首先 , 找到以下文件:
D:\Tornado\target\h\tool\gnu\defs.gnu
使用diab编译器时文件为
D:\Tornado\target\h\tool\diab\defs.diab
4. 在文件中搜索ansi关键字,找到下面3行
OPTION_ANSI= -ansi
CC_COMPILER= -ansi
C++_COMPILER= -ansi
5. 在ansi前面加#注释掉即可,例如改成
CC_COMPILER= #-ansi

编译选项的其他关键字也可以在这个文件中设置 。

tornado编辑一般用什么编辑器python是一款应用非常广泛的脚本程序语言,谷歌公司的网页就是用python编写 。python在生物信息、统计、网页制作、计算等多个领域都体现出了强大的功能 。python和其他脚本语言如java、R、Perl 一样 , 都可以直接在命令行里运行脚本程序 。工具/原料
python;CMD命令行;windows操作系统
方法/步骤
1、首先下载安装python,建议安装2.7版本以上,3.0版本以下,由于3.0版本以上不向下兼容,体验较差 。

2、打开文本编辑器,推荐editplus,notepad等 , 将文件保存成 .py格式,editplus和notepad支持识别python语法 。
脚本第一行一定要写上 #!usr/bin/python
表示该脚本文件是可执行python脚本
如果python目录不在usr/bin目录下 , 则替换成当前python执行程序的目录 。
3、编写完脚本之后注意调试、可以直接用editplus调试 。调试方法可自行百度 。脚本写完之后,打开CMD命令行,前提是python 已经被加入到环境变量中,如果没有加入到环境变量,请百度

4、在CMD命令行中,输入 “python” + “空格”,即 ”python “;将已经写好的脚本文件拖拽到当前光标位置,然后敲回车运行即可 。

python tornado 进行大量sql写入操作 导致其他请求全部阻塞 是我方法有问题还是确实tornado是单进程单线程的服务器,如果是同步请求,一个长时间的请求没结束,就不能去处理其他的请求,可是tornado支持异步请求,就是当我们在等待结果的时候不阻塞,增加一个回调函数作为参数 , 在有结果的时候通过回调函数进行通知 。这样,服务器就可以去接受其他的请求了 。

至于php,可以看看php-fpm的配置文件 , 那个是多进程来出处理请求的

尊敬的客户 , 因您在我行开户留存证件即将过期,为免影响业务办理 , 请您本人携带身份证到我行任一网点更新意思就是你当初办理银行存折或银行卡时留的身份证显示有效期即将到期 。若你的身份证已经到派出所更换成功,可以拿新的身份证到银行更新信息 。若你身份证还没更换 , 则先去派出所更换身份证后再拿新的身份证到银行办理资料更新

如何理解 Tornado假设你还不知道Tornado是什么也不知道为什么应该对它感兴趣 , 那我将用简短的话来介绍Tornado这个项目 。如果你已经对它有了兴趣,你可以跳去看下一节内容 。
Tornado是一个用Python编写的异步HTTP服务器,同时也是一个web开发框架 。该框架服务于FriendFeed网站 , 最近Facebook也在使用它 。FriendFeed网站有用户数多和应用实时性强的特点,所以性能和可扩展性是很受重视的 。由于现在它是开源的了(这得归功于Facebook) , 我们可以彻底的对它是如何工作的一探究竟 。
我觉得对非阻塞式IO (nonblocking IO) 和异步IO (asynchronous IOAIO)很有必要谈一谈 。如果你已经完全知道他们是什么了,可以跳去看下一节 。我尽可能的使用一些例子来说明它们是什么 。
让我们假设你正在写一个需要请求一些来自其他服务器上的数据(比如数据库服务 , 再比如新浪微博的open api)的应用程序,然后呢这些请求将花费一个比较长的时间 , 假设需要花费5秒钟 。大多数的web开发框架中处理请求的代码大概长这样:
def handler_request(self, request):
answ = self.remote_server.query(request) # this takes 5 seconds
request.write_response(answ)
如果这些代码运行在单个线程中,你的服务器只能每5秒接收一个客户端的请求 。在这5秒钟的时间里,服务器不能干其他任何事情,所以,你的服务效率是每秒0.2个请求,哦,这太糟糕了 。
当然,没人那么天真,大部分服务器会使用多线程技术来让服务器一次接收多个客户端的请求,我们假设你有20个线程,你将在性能上获得20倍的提高,所以现在你的服务器效率是每秒接受4个请求,但这还是太低了,当然,你可以通过不断地提高线程的数量来解决这个问题,但是,线程在内存和调度方面的开销是昂贵的,我怀疑如果你使用这种提高线程数量的方式将永远不可能达到每秒100个请求的效率 。
如果使用AIO,达到每秒上千个请求的效率是非常轻松的事情 。服务器请求处理的代码将被改成这样:
def handler_request(self, request):
self.remote_server.query_async(request, self.response_received)
def response_received(self, request, answ):# this is called 5 seconds later
request.write(answ)
AIO的思想是当我们在等待结果的时候不阻塞,转而我们给框架一个回调函数作为参数,让框架在有结果的时候通过回调函数通知我们 。这样,服务器就可以被解放去接受其他客户端的请求了 。
然而这也是AIO不太好的地方:代码有点不直观了 。还有 , 如果你使用像Tornado这样的单线程AIO服务器软件,你需要时刻小心不要去阻塞什么,因为所有本该在当前返回的请求都会像上述处理那样被延迟返回 。

如何理解 Tornadotornado是一个异步的http框架,fb最早是拿tornado做feed流上提醒用的 , tornado内置了一个asynchttpclient,这个特别适合基于rest web service做网站 , 使用@gen.coroutine 和yield基本上就可以把异步代码变成同步代码了 。tornado代码量不大,特别适合有兴趣的人,自己研究用 。不过tornado问题也不小 , 做网站的话,最主要的是 , tornado是单线程的(虽然可以通过fork来搞多进程) , 而web后端多用rdbms,特别是mysql主要的driver都是同步阻塞的,也就是说访问数据库会阻塞tornado,所以对做网页的限制比较大 。

如何理解 TornadoTornado既是一个web server,也是web framework 。而它作为web server 采用的是asynchronous IO的网络模型,这是一种很高效的模型 。

web framework的定义(http://wiki.python.org/moin/WebFrameworks)
A Web framework is a collection of packages or modules which allow developers to write Web applications or services without having to handle such low-level details as protocols, sockets or process/thread management.
Tornado作为web server,提供了web framework的api,可以来直接构建自己的web程序 。同时,Tornado支持WSGI ( http://www.python.org/dev/peps/pep-0333/ ) , 也就是说它可以有能力其它的一些python的框架一起使用,比如django, bottle, flask等 。不妨看下bottle在不同server下的性能评测,其中就有tornado( http://bottlepy.org/page/2009-12-19_Comparing_HelloWorld_Performance ) 。额外说的是,WSGI的框架是不支持异步的 , 所以如果有异步调用的逻辑的web程序,Tornado也是选择之一 。

没有使用过Node.js,但官网说:
Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications.
可以把Node.js理解成基于V8的javascript运行环境或工具包,它属于偏底层的抽象,扩展了javascript写服务端程序的能力 。所以基于它也会有不同的web framework 。从这个角度来看 , Node.js和Tornado其实不在一个层次上 。
不过相同的是 Node.js 和 Tornado都采用的的单进程单线程异步IO的网络模型 。它们都可以写异步非阻塞的程序,不过我觉得因为javascript的语言特性,Node.js对异步回调非阻塞的风格坚持比Tornado更彻底一点 。不过通常多进程时,一个进程的短时间阻塞也是可以接受的 。

使用Nginx是因为一些单进程服务无法利用多核CPU , 同时也会有单机的限制,所以通常会在多个服务器启动多个进程实例,使用Nginx在前端作为反向代理服务器来分发web请求,同时负载均衡 。Nginx是C写的,有更好的并发性,可配置性,对静态文件也有更好的支持 。当然这是Nginx的常用情景 , 其实也可以直接使用Nginx来构建web应用,可以参考OpenResty项目( http://openresty.org/ ) 。

其实网络模型、web server、web framework是三个不同层次,它们之间并不冲突,是选择的关系 。理解前,不妨先理清概念:)

作者:atomd
链接:http://www.zhihu.com/question/20136991/answer/14096189
来源:知乎
著作权归作者所有 。商业转载请联系作者获得授权,非商业转载请注明出处 。

Tornado 有哪些独到的优势?是不是被过分追捧了个人认为是被过份吹捧了 , 原因在于friendfeed和Facebook的明星效应 。

和python其它框架比
论效率我测试下来,低并发有1/2 gevent 高并发时候 差距更明显 。
论代码,是非常之不pythonic的 , 如IoLoop().instance().start()之类的很java的写法 。

知乎为什么选择 Tornado 作为 Web 开发框架ornado异步非阻塞的I/ 。这也是FriendFeed开发Tornado的原因-----因为FriendFeed需要实时更新Timeline;O模型的确让人耳目一新,所以选择Tornado也就在情理之中了 。由于知乎也有大量长轮询连接需要维护 , 而Comet又是目前最好,最流行的方法,Tornado的优势主要在于对大量Comet长轮询连接的维护上

能直接利用Tornado来做一个简单的PUSH消息系统吗可以做成tornado集群啊 , 一台机器扛不住就横向扩展,然而这样就需要把服务解耦 , 试想这么一个场景,A用户对B用户发了信息 , 然而A用户在0.11这台机器上,B用户在0.12这台机器上,这样就需要一个单独的消息中心,所有节点全部订阅这个消息中心就好了 。如此解耦tornado集群只负责消费消息,而消息的生产者就要分离出去 。

最近正在做tornado的消息推送集群设计,想利用zeromq做消息发布中心,一旦有消息之后通知所有tornado集群服务器,难点不在于消息中心而在于tornado节点服务器上的zeromq的subscirber怎么集成到tornado里面去 。貌似tornado的ioloop不认zeromq的socket 。过渡期采用的是两个线程,一个启动tornado,另一个线程启动zeromq的subscriber
留个坑,等做好了来更新 。

如何安装tornado1、首先是建立虚拟环境 , 并激活:mkdir nmapp2virtualenv --distribute nmapp2_venvcd nmapp2_venvsource bin/activate2、然后安装 Tornado:pip install tornado 3、测试按照是否成功Tornado 既是 Python 框架又是 http 服务器,我们可以简单写几行代码来测试下 。test.pyimport tornado.ioloopimport tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self):self.write("Hello, Nowamagic")application = tornado.web.Application([(r"/", MainHandler),])if __name__ == "__main__":application.listen(8888)tornado.ioloop.IOLoop.instance().start()然后输入 python /root/nmapp2_venv/test.py启动 tornado 进程,访问 http://app.nowamagic.net:8888/ 即可输出 Hello Nowamagic 。下面我们介绍用 Supervisord 工具帮我们 hold 住 tornado 进程 。
TORNADO是什么意思Tornado:IDS“狂风”战斗机 , 于l969年3月,由英国、德国和意大利三国联合成立的帕那维亚飞机公司设计 。
tornado
KK: []
DJ: []
n.[C]
1. 龙卷风;旋风;飓风
2. (非洲西部的)大雷飑

在tornado里的render函数什么意思在tornado里的render函数的意思是找到模板文件 , 进行渲染 , 从而显示页面 。

tornado启动失败有关问题 , 求教各位大能开启调试模式需要 import 一个模块即可,import tornado.autoreload
将修改的文件上传之后 , 不需要再重启,修改的结果就会显示出来了,另外也可以在 settings 加入 debug选项:
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
settings = {'debug' : True}
define("debug",default=True,help="Debug Mode",type=bool)
def main():
tornado.options.parse_command_line()
application = tornado.web.Application([
(r"/", MainHandler),
(r"/nowamagic/", NowaMagicHandler),
],**settings)
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start().

Tornado 有没有简单的办法一次性取到所有参数web.py的web.input()非常好用,tornado里我的做法是这样的:
在BaseHandler加个input函数获取所有的值并转换成storage:
from Storage import storage

def input(elf):
i = storage()
args = self.request.arguments
for a in args:
i[a] = self.get_argument(a)
return i

i["files"], i["path"]这些再另作处理下 。就可以用self.input()获取所有GET和POST的值了 。

python tornado 怎么被外网连接绑定你的 外网IP 或者0.0.0.0 , 端口号最好用80(http协议默认端口是80) 。路由器可能要做端口映射 , 把跑 tornado 的电脑的相应端口号 暴露到外网

android端通过url访问tornado服务器,那么tornado怎么返回消息给android客户端?使用http协议,就有response啊

tornado框架,页面怎么往后端传数据ornado是python的web框架,这里简单记录下利用tornado怎么实现文件的上传,其中web.py上传功能类似 。
直接用代码说明:
代码来自:http://my.oschina.net/chenlei123/blog/127563

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

#!/usr/bin/python
#-*- encoding:utf-8 -*-
import tornado.ioloop
import tornado.web
import os

class UploadFileHandler(tornado.web.RequestHandler):
def get(self):
self.write('''

Upload File







''')

def post(self):
upload_path=os.path.join(os.path.dirname(__file__),'files')#文件的暂存路径
file_metas=self.request.files['file']#提取表单中‘name’为‘file’的文件元数据
for meta in file_metas:
filename=meta['filename']
filepath=os.path.join(upload_path,filename)
with open(filepath,'wb') as up:#有些文件需要已二进制的形式存储,实际中可以更改
up.write(meta['body'])
self.write('finished!')

app=tornado.web.Application([
(r'/file',UploadFileHandler),
])

if __name__ == '__main__':
app.listen(3000)
tornado.ioloop.IOLoop.instance().start()


其中注意利用form上传的html代码的写法 。另外就是tornado获取post数据的方法 。

web前端开发中比较有用的资源bootscrap:http://www.bootcss.com/
bootscrap中分页插件:http://bootstrappaginator.org/#minimum-configuration

js脚本构造form(表单)提交的类
转自:http://runtool.blog.163.com/blog/static/183144445201272053421155/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

function FormManager(url,method){//表单提交管理
if(method.toLowerCase()!="post"&& method.toLowerCase()!="get"){ //method字段设置不正确
alert("error:set method get or post!");
return false;
}

this.form=document.createElement("form");//创建提交表单
this.form.method=method;
this.form.action=url;

this.put=function(key,value){//添加参数队列
var myinput=document.createElement("input");
myinput.type="hidden";
myinput.name=key;
myinput.value=https://www.zaoxu.com/jjsh/bkdq/value;
this.form.appendChild(myinput);
}

this.submit=function(){//提交表单
alert(this.form.innerHTML);
document.body.appendChild(this.form);
this.form.submit();
}


//使用
var url="http://www.swu.edu.cn";
var method="post1";
var myform=new FormManager(url,method);

myform.put("name","handonghai");
myform.put("sex","boy");
myform.put("age","23");

myform.submit();




Tornado 有哪些独到的优势?是不是被过分追捧了?tornado 性能不错,很轻量,比较 KISS,最终还是看你自己的需求了

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

Tornado 有哪些独到的优势?是不是被过分追捧了年轻人的优势在于精力和体力上 并且有不同的陈腐的创新精神
精力的话需要集中在工作上 体力上的话比上年纪的人更能持续性
创新精神是不容易被规则给腐蚀 有自己独到的眼光
但是任何事情都是双面的 你必须做到平衡
不能过分的别具一格容易遭到排斥 也不能太强势 必须安抚好各放势力
要让大部分人认为你努力有干劲 事无巨细 但是必须稳扎稳打 不能操之过急

tornado怎么处理非常耗时的定时任务【tornado】用Handler与线程的sleep(long)方法(不建议使用,java的实现方式)