如何理解 tornado django

如何理解 Tornado_百度知道
如何理解 Tornado
提问者采纳
A函数执行到断点时就停下. 那如果只考虑一个函数呢,是不是通过这个东西就可以做到多个函数之间来回跳转?那对于A函数而言:一个协程??,那山门时候跳转呢?之前是yield才会?执行到断点的时候就停下?封装成:其实就是其可以执行到一半先停下,那我是不是可以将之封装一下呢本质上什么是协程,是不是就可以实现多个函数来回跳转呢,只有next往下setp时候这个函数才接着往下执行~对不对,那么在Python中山门可以实现debug断点功能呢!恩?当然是yield了~~执行到中间的yield系统就停下返回了~之后在调用next时才回接着往下执行~~~ 你看?举个例子:就是类似goto一样 可以在多个fun之间来回跳转~ 比如A函数执行到一半然后switch到B函数执行~~诸如此类? 那如果我们可以实现类似的断点机制?,干点别的事情后再接着往下运行~ 看到这里你是不是想到了debug时的打断点,系统去B执行~等B执行完毕了才回来接着step往断点后边的代码航执行~~~~协程其实就是这么个东西?
来自团队:
其他类似问题
为您推荐:
其他1条回答
你好,龙卷风的意思
你的采纳是我坚持不懈的动力哦!
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁tornado 到底是个什么东西呢? 如果它是个webserver ,那么后端如何搭配Django使用 ,又能否搭配Node.js 或 PHP?如果作为web框架,nginx对于她来说意义在哪里? 在实际使用中是否会影响Tornado本身的异步IO设计?Tornado与node.js 的实现的目的 ,和设计方式上的不同之处在哪里 ( 不谈语言 )?----------------------------- 补充:以下是看官方说明和 Google 了一番后的理解:它可以作为一个裸 webserver 来使用 ,就是说它的后端可以运行 Django、web.py。它是一个简单 Python 框架,url 基于正则,有自己的模板实现,但是没有 orm。这部分看起来类似于 web.py。非阻塞异步 IO,类似于 node.js。它的前端可以放 Nginx
,感觉类似于 Nginx、Apache 之于 Tomcat。就是说它作为 web 框架比 Django 简单,又支援异步 IO,且更不需要前端的 webserver ?我已经混乱了, Tornado是 Nginx、Django、Node.js 的结合体?又或是 Nginx * 20% + Django * 40% + Node.js * 40% ?
Tornado既是一个web server,也是web framework。而它作为web server 采用的是asynchronous IO的网络模型,这是一种很高效的模型。web framework的定义()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 (
),也就是说它可以有能力其它的一些python的框架一起使用,比如django, bottle, flask等。不妨看下bottle在不同server下的性能评测,其中就有tornado(
)。额外说的是,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项目(
)。其实网络模型、web server、web framework是三个不同层次,它们之间并不冲突,是选择的关系。理解前,不妨先理清概念:)
大家的回答都有点片面,更多的关注web框架成,其实tornado远远不止这些,且听我慢慢到来1.高性能的网络库,这可以和gevent,twisted,libevent等做对。提供了异步io支持,超时事件处理,在此基础上提供了tcpserver,httpclient,尤其是curlhttpclient在现有http客户端中肯定排第一。可以用来做爬虫,游戏服务器,据我所知业界已有使用tornado作为游戏服务器2.web框架,这可以和django,flask对。提供了路由,模板等web框架必备组件。与其他区别是tornado是异步的,天然适合长轮训,这也是friendfeed发明tornado的原因,当前flask也可以支持,但必须借住gevent等3.较为完备的http服务器,这点可以和nginx,apache对比,但只支持http1.0,所以使用nginx做前段不仅是为了更好利用多核,也是让其支持http1.14.完备的wsgi服务器,这可以和gunicore,gevent wsgi server做对比,也就是说可以让flask运行在tornado之上,让tornado加速flask5.提供了完备的websocket支持,这让html5的游戏等提供了便利。像知乎长轮训就是使用了websocket,但websocket手机支持的不是很好,前段时间不得不使用定时ajax发送大量请求,期待手机浏览器赶快奋起直追tornado,你值得拥有
建议楼主阅读一下这篇论文 C10K problem,虽然有点老了 其实,你也可以说nginx是一个framework,不过是针对C的。裸WebServer表示他支持HTTP协议,既然支持HTTP协议,你前面放啥反向都无所谓,nginx apache squid varnish。或者也可以用wsgi模块,只是采用了特殊的通讯协议。为什么要在tornado前面放nginx,原因在于,Python虽然有多线程,但是Python的解释器有GIL
这点非常影响了Python和Tornado利用多核的能力,所以只能通过多进程来利用多核。既然多进程,一般就需要在前端放置nginx haproxy做为负载均衡的反向代理,或是使用这些应用服务器的wsgi模块来管理进程的生命周期等等。另外对于静态文件的服务,也是nginx之类的更具有优势。(他们直接把请求转发到tornado的进程中,你根本不用管请求怎么来的,专心写你的程序。)其他很多脚本语言的框架都有类似问题,比如ruby,而Nodejs更加是连线程都没有了。Nodejs的核心在于,他使用了JavaScript天生擅长的事件/回调机制来实现异步。Python对于匿名函数和闭包支持不够好,所以Tornado通过了类来和回调方法来实现异步,这里没有事件的概念。(没深入研究过Tornado,大致是这么了解的)另外Tornado封装了很多常用的诸如静态文件处理、Router、模板等等,而Nodejs基本上是一个纯粹的协议框架,这些功能都需要自己去写。Nodejs+Express差不多就可以等于Tornado的功能了。而如果是要做一个中间件或中间层,做一些高级点的协议处理,可能nodejs更加能胜任。在tornado里面去调用用php或者nodejs所开发的服务,这是没问题的,主要要看架构上如何设计。
50贝利大海盗tornado: options.py - 9esuLuciano - ITeye技术网站
博客分类:
1.Options.py在tornado里面起什么作用?
2.这个模块中包含什么方法?
3.各个方法有什么作用?
4.使用此模块的典型场景
5.使用各个函数的典型场景
边看边答:
1.呃,基本上现在我的理解就是:Options提供一个透明,简单的方法,使得一个module可以很容易从tornado统一的接口中获得所需要的外来参数,例如:
从命令行获得#!/ur/bin/env python
'''Test.py'''
from tornado.options import define, options
define("param1", default="it's parameter 1", help="value for param 1")
define("param2", default="it's parameter 2", help="value for param 2")
options.parse_command_line()
if __name__ == "__main__":
print options.param1
print options.param2
### End of Test.py ####
python Test.py
&&&it's parameter 1
&&&it's parameter 2
python Test.py --param1="Hello world"
&&&Hello world
&&&it's parameter 2
python Test.py --param1="Hello" --param2="world"
从配置文件获得嗯,这个例子就不写了,和上面不一样的地方就是使用tornado.options.parse_config_file(path_to_config_file)
嗯,我知道你们会问,其实是因为我自己不知道,加入从命令行给出的参数模块里没有通过define定义过怎么办?其实是这样,对于这种情况,tornado会抛出异常。。。
2. 呃看关键的Module暴露出来的几个函数吧, 不过在此之前,需要先说这里面包含的几个重要的类
类一: _Options,字典类,以文件名为键,以等一下要说的另外一个类的集合作为值,也就是说,一个filename对应一票Option,所以从另外一个角度说,_Options这个映射类的实例是一个顶层的全局变量
类二: _Option,嗯,没啥好说的,在类内部定义了一下用来把参数变成Python类型实例的parser而已
Module内关键的几个函数
define:正如上面例子里面看到的,定义了当前module大概可能也许需要的从外部获得的参数,在module内部使用这些个参数的时候既然使用了tornado,那么可以使用tornado.options.name_of_parameter来获得参数的值。然后这个时候Options这个全局变量就会根据当前Callee的文件名以及param的名字去找了。。
parse_command_line:
parse_config_file
需要注意的是,如果只define了没有调用任何一个parse,那基本上是无用的。。。。
在Options.py这个module里面tornado顺便定义了几个可用参数。。
define("help", type=bool, help="show this help information")
define("logging", default="info",
help=("Set the Python log level. If 'none', tornado won't touch the "
"logging configuration."),
metavar="debug|info|warning|error|none")
define("log_to_stderr", type=bool, default=None,
help=("Send log output to stderr (colorized if possible). "
"By default use stderr if --log_file_prefix is not set and "
"no other logging is configured."))
define("log_file_prefix", type=str, default=None, metavar="PATH",
help=("Path prefix for log files. "
"Note that if you are running multiple tornado processes, "
"log_file_prefix must be different for each of them (e.g. "
"include the port number)"))
define("log_file_max_size", type=int, default=100 * 1000 * 1000,
help="max size of log files before rollover")
define("log_file_num_backups", type=int, default=10,
help="number of log files to keep")
9esuLuciano
浏览: 124619 次
中间的兼职例子很逗 哈哈哈
学习了,详细,赞个
不知是版本问题还是怎么的
你在方法中定义方法就相当于在方法中调用lambda!
很是有用 不错Powerpoint converter如何理解 Tornado_百度知道
如何理解 Tornado
提问者采纳
idou]《源自西班牙语“旋转”的意思》可数名词(pl.do[tɒr`n&#1108,破坏力极大)2 (强烈的) 飓风tornado
tor,~s)1 龙卷风(尤常发生于西非或美国密西西比河 (Mississippi) 流域者;do. ~es:ˋnє tɒ.na
来自团队:
其他类似问题
为您推荐:
tornado的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Tornado使用指南_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
Tornado使用指南
适​合​初​学​者​使​用​,​简​单​介​绍​一​下​t​o​r​n​a​d​o​和​v​x​w​o​r​k
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢}

我要回帖

更多关于 tornado 异步 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信