欢迎来到一句话经典语录网
我要投稿 投诉建议
当前位置:一句话经典语录 > 描写句子 > 描写tornado的句子

描写tornado的句子

时间:2016-06-24 11:38

如何理解 Tornado

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是三个不同层次,它们之间并不冲突,是选择的关系。

理解前,不妨先理清概念。

如何理解 Tornado

假设你还不知道Tornado是什么也不知道为什么应该对它感兴趣,那我将用简短的话来介绍Tornado这个项目。

如果你已经对它有了兴趣,你可以跳去看下一节内容。

Tornado是一个用Python编写的异步HTTP服务器,同时也是一个web开发框架。

该框架服务于FriendFeed网站,最近Facebook也在使用它。

FriendFeed网站有用户数多和应用实时性强的特点,所以性能和可扩展性是很受重视的。

由于现在它是开源的了(这得归功于Facebook),我们可以彻底的对它是如何工作的一探究竟。

我觉得对非阻塞式IO (nonblocking IO) 和异步IO (asynchronous IO AIO)很有必要谈一谈。

如果你已经完全知道他们是什么了,可以跳去看下一节。

我尽可能的使用一些例子来说明它们是什么。

让我们假设你正在写一个需要请求一些来自其他服务器上的数据(比如数据库服务,再比如新浪微博的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服务器软件,你需要时刻小心不要去阻塞什么,因为所有本该在当前返回的请求都会像上述处理那样被延迟返回。

写一个模块,用tornado 和用jquery去写,哪个好

二少又做梦了使用tornado和angularjs搭建网站从这篇博文开始,将讲述建立一个站点的全过程。

一方面自己从未做过这类事情,算是对自己的一个挑战,另一方面也给想要学这个的同胞留点参考,特别是*需要课程设计作业和毕业设计的同志们*。

首先介绍一下网站功能。

这次要建立的一个网站类似于一个在线的辩论场,用户可以发起辩论,自由选择题目,邀请其他用户参加。

参加辩论的用户可以自由选择自己论点,分正反双方辩论,当然也可以选择中立进行搅浑水。

关于要用到的技术。

后端采用Python开发,框架选用Tornado,前端使用AngularJS配合jQuery,数据库选择PostgreSQL,操作系统当然要用Ubuntu了。

这里选择的技术完全是因为个人喜好,绝不是因为和其他方案相比有啥优劣之分。

另外,因为我也使用过Python、JavaScript,但从未做过实际的项目,所以代码质量可能会比较丢人。

### 关于Tornado ###Tornado是一个使用Python开发的web框架,按其作者说法,Tornado从另一个小巧的框架web.py借鉴了很多东西。

和其他框架不同,Tornado并不是很庞大的一个框架,只是提供了一些基本的功能,带来的好处是比较灵活,和其他功能模块可以很容易结合到一块,缺点则是工作量多点。

##### Tornado在Ubuntu下的安装 ####首先安装pipsudo apt-get install python-pip然后安装Tornadosudo pip install tornado当然,也可以使用easy_install来安装。

#### Tornado入门 ####先来看一个简单的Tornado例子(代码来自tornado官网)import tornado.ioloopimport tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self):self.write(Hello, world)application = tornado.web.Application([(r\\\/, MainHandler),])if __name__ == __main__:application.listen(8888)tornado.ioloop.IOLoop.instance().start()用tornado开发web应用还是比较简单的,主要步骤就是如上所示,设置好(URL, Handler)的映射,至于其他功能,还有待进一步学习。

### 关于AngularJS ###AngularJS是从大Google出来的前端框架,提供了数据绑定等功能,但是没有对DOM操作进行封装,所以和jQuery代培使用比较好。

### 关于PostgreSQL ###PostgreSQL是一个开源的关系型数据库,功能强大,但是国内的普及度不高,自从9.2开始原声支持json之后,再加上本身又提供类似按列存储的功能,国外有些人已经开始把它当作NoSQL来用了。

这系列博文中即将建立的站点称为“嘚啵嘚”。

## 数据库表的设计 ##嘚啵嘚使用的数据库是PostgreSQL,因此你要确定自己的系统中已经安装好了它。

网上关于这方面的文章很多,不再说了。

#### 首先建立开发者账户,数据库 ####create role developer with password 'developer';alter role developer LOGIN;create database debate;grant all privileges on database debate to developer;#### 接下来建立三个表,users用于存储用户信息,debates用于存储辩论自身的相关信息,arguments用于存储用户的论点(也就是发言内容)。

####建立用户信息表,这里我们只需要存储用户的帐号(使用email地址,需要保证唯一)、密码以及账户状态,同时要对每一个用户生成一个独立的ID,并在此ID上建立主键约束。

CREATE TABLE users(user_id serial NOT NULL, -- 用户IDemail character(256) NOT NULL, -- 用户邮箱地址passwd character(128) NOT NULL, -- 用户密码state smallint NOT NULL DEFAULT 0, -- 账户状态:0--未激活 1--已激活CONSTRAINT users_pk_id PRIMARY KEY (user_id),CONSTRAINT user_uk_email UNIQUE (email))WITH (OIDS=FALSE);ALTER TABLE usersOWNER TO developer;COMMENT ON TABLE usersIS '用户信息表';COMMENT ON COLUMN users.user_id IS '用户ID';COMMENT ON COLUMN users.email IS '用户邮箱地址';COMMENT ON COLUMN users.passwd IS '用户密码';COMMENT ON COLUMN users.state IS '账户状态:0--未激活 1--已激活';建立辩论表。

写Tornado 异步,有没有更好的实现

默认用 Tornado 写程序,修改完代码需要将文件上传,然后重启 Supervisord (supervisorctl reload),修改的程序才能生效。

但这样比较麻烦,因为需要SSH到服务器进行重启操作。

Tornado 自带的调试模式可以让我们轻松不少。

开启调试模式也很简

声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。联系xxxxxxxx.com

Copyright©2020 一句话经典语录 www.yiyyy.com 版权所有

友情链接

心理测试 图片大全 壁纸图片