Python3 --- Tornado简介

一、Tornado简介

Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,由FriendFeed公司在自己的网站FriendFeed中使用,被Facebook收购以后框架在2009年9月以开源软件形式开放给大众。

 

特点:

  • 作为Web框架,是一个轻量级的Web框架,类似于另一个Python web框架Web.py,其拥有异步非阻塞IO的处理方式。
  • 作为Web服务器,Tornado有较为出色的抗负载能力,官方用nginx反向代理的方式部署Tornado和其它Python web应用框架进行对比,结果最大浏览量超过第二名近40%。

性能: Tornado有着优异的性能。它试图解决C10k问题,即处理大于或等于一万的并发。

C10K:Concurrently handling ten thousand connections,即并发10000个连接

Tornado可以大致分为四个主要部分:

  • 一个Web框架(包括RequestHandler它的子类创建Web应用程序和各种支持类)。
  • HTTP(HTTPServer和 AsyncHTTPClient)的客户端和服务器端实现。
  • 异步网络库包括类IOLoop 和IOStream,其充当用于HTTP组件的构建块,并且还可以用于实现其它协议。
  • 一个协程库(tornado.gen)允许异步代码以比链接回调更直接的方式编写。

 

Tornado Web框架和HTTP服务器一起提供WSGI的全栈替代方案。尽管可以在WSGI容器中使用Tornado Web框架(WSGIAdapter),或者将Tornado HTTP服务器用作其他WSGI框架(WSGIContainer)的容器,tornado.wsgi模块中也提供了对WSGI的一些支持,但每种组合都有其局限性,并且需要充分利用Tornado一起使用Tornado的Web框架和HTTP服务器,应该编写大多数应用程序来直接使用Tornado自己的接口而不是使用WSGI。(这是官方的推荐~)

一般来说,Tornado代码不是线程安全的。Tornado中唯一可以安全地从其他线程调用的方法是IOLoop.add_callback。也可以使用IOLoop.run_in_executor异步运行另一个线程上的阻塞函数,但请注意传递给它的函数run_in_executor应该避免引用任何Tornado对象。

 

下面是一些模块介绍:

Web framework:

  • tornado.web — RequestHandler and Application classes
  • tornado.template - 模板
  • tornado.routing - 基本路由实现
  • tornado.escape - 转义和字符串操作
  • tornado.locale - 国际化支持
  • tornado.websocket - 与浏览器的双向通信socket

 

tornado的HTTP服务器和客户端:

  • tornado.httpserver - 非阻塞HTTP服务器
  • tornado.httpclient - 异步HTTP客户端
  • tornado.httputil - 操纵HTTP头和URL
  • tornado.http1connection - HTTP / 1.x客户端/服务器实现

 

异步网络:

  • tornado.ioloop -主事件循环
  • tornado.iostream - Flexible output generation(灵活的输出生成~不知道该怎么翻译好)
  • tornado.netutil - 操作HTTP报头和URL的工具类
  • tornado.tcpclient- IOStream连接工厂
  • tornado.tcpserver- IOStream基于TCP的服务器

 

协程和并发

  • tornado.gen - 基于发生器的协程
  • tornado.locks - 同步原语
  • tornado.queues - 协程队列
  • tornado.process - 用于多个进程的实用程序

 

与其他服务集成

  • tornado.auth - 使用OpenID和OAuth进行第三方登录
  • tornado.wsgi - 与其他Python框架和Web服务器的网关接口
  • tornado.platform.caresresolver - 使用C-Ares的异步DNS解析器
  • tornado.platform.twisted - twisted和tornado之间的桥梁
  • tornado.platform.asyncio- asyncio和tornado之间的桥梁

 

Utilities

  • tornado.autoreload - 自动检测开发中的代码更改
  • tornado.concurrent-  Work with Future objects
  • tornado.log - 打印日志的
  • tornado.options - 命令行解析
  • tornado.stack_context - 跨异步回调的异常处理
  • tornado.testing - 对异步代码的单元测试支持
  • tornado.util - 通用工具类

 

二、入门案例:

import tornado.web
import tornado.ioloop

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        """对应http的get请求方式"""
        self.write("Hello World!")

if __name__ == '__main__':
    app = tornado.web.Application([
        (r"/", IndexHandler),
    ])
    app.listen(8000)
    tornado.ioloop.IOLoop.current().start()

 

通过httpserver实现

import tornado.web
import tornado.ioloop
import tornado.httpserver

class IndexHandler(tornado.web.RequestHandler):
    """主路由处理类"""
    def get(self):
        self.write("Hello World!")

if __name__ == "__main__":
    app = tornado.web.Application([
        (r"/", IndexHandler),
    ])

    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(8000)

    tornado.ioloop.IOLoop.current().start()

  

你可能感兴趣的:(Python3,------,Tornado)