美文网首页
python-tornado简单使用

python-tornado简单使用

作者: 时尚灬IT男 | 来源:发表于2019-05-23 14:43 被阅读0次

首先附上tornado官方网站 tornado (看官网最全)

安装tornado:

pip install tornado

先从hello world开始

import tornado.ioloop

import tornado.web

#定义处理类型

class MainHandler(tornado.web.RequestHandler):

    #添加一个处理get请求方式的方法

    def get(self):

        self.write("Hello, world")

def make_app():

    return tornado.web.Application([

        (r"/", MainHandler),

    ])

if __name__ == "__main__":

    app = make_app()  #创建一个应用对象

    app.listen(8888) # 设置端口

    tornado.ioloop.IOLoop.current().start() #启动web程序,开始监听端口的连接

Tornado的优势

1.轻量级web框架

2.异步非阻塞IO处理方式

3.出色的抗负载能力

4.优异的处理性能,不依赖多进程/多线程,一定程度上解决C10K问题

5.WSGI全栈替代产品,推荐同时使用其web框架和HTTP服务器

Tornado 代码解析

tornado.web:tornado的基础web框架

    RequestHandler:封装对请求处理的所有信息和处理方法

    get/post/..:封装对应的请求方式

    write():封装响应信息,写响应信息的一个方法

tornado.ioloop:核心io循环模块,封装linux的epoll和BSD的kqueue, tornado高性能处理的核心。

    current()返回当前线程的IOLoop实例对象

    start()启动IOLoop实力对象的IO循环,开启监听

程序调试之debug配置

    #自动重启+取消缓存模板+取消缓存静态文件+提供追踪信息tornado.web.Application([(..)], debug=True)注:开发之初可以设置debug=True方便调试,开发完毕改为False.

get方式传递参数

    get_query_arguments(name,default=_ARG_DEFAULT,strip=True)

    get_query_argument(name ,strip=True)

post方式传递参数

    get_body_arguments(name, default=_ARG_DEFAULT,strip=True)

    get_body_argument(name ,strip=True)

request/json

# -*- coding:utf-8 -*-

from tornado.web import Application, RequestHandler

from tornado.ioloop import IOLoop

class IndexHandler(RequestHandler):

    def get(self):

        print self.request

        json_str = {"username": "admin", "password": "123123"}

        self.write(json.dumps(json_str))

if __name__ == "__main__":

    app = Application([(r"/", IndexHandler)])

    app.listen(8000)

    IOLoop.current().start()

异步非阻塞

import time

import logging

import tornado.ioloop

import tornado.web

import tornado.options

from tornado import gen

from concurrent.futures import ThreadPoolExecutor

class NoBlockingHnadler(tornado.web.RequestHandler):

    @gen.coroutine

    def get(self):

        print(11111111111)

        yield gen.sleep(10)

        self.write('Blocking Request')

class BlockingHnadler(tornado.web.RequestHandler):

    def get(self):

        print(11111111111)

        time.sleep(10)

        self.write('Blocking Request')

def make_app():

    return tornado.web.Application([

        (r"/block", BlockingHnadler),

        (r"/noblock", NoBlockingHnadler),

    ], autoreload=True)

if __name__ == "__main__":

    app = make_app()

    app.listen(8888)

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

这里要强调的是:这里的异步非阻塞是针对另一请求来说的,本次的请求该是阻塞的仍然是阻塞的。

多进程运行

coroutine 是给Non-blocking 函数提供异步协程的方式运行, ThreadPoolExecutor 则可以给blocking 的函数提供异步的方式运行,但是由于是多线程的,Python 使用多线程对性能来说是需要谨慎的,大量的计算量的情况可能会造成性能的下降。

import tornado.web

from tornado import gen

from tornado.httpserver import HTTPServer

class IndexHandler(tornado.web.RequestHandler):

    def get(self):

        self.write('index')

@gen.coroutine

def doing():

    yield gen.sleep(10)

    raise gen.Return('Non-Blocking')

class NonBlockingHandler(tornado.web.RequestHandler):

    @gen.coroutine

    def get(self):

        result = yield doing()

        self.write(result)

def make_app():

    return tornado.web.Application([

        (r"/index", IndexHandler),

        (r"/nonblocking", NonBlockingHandler),

    ])

def main():

    app = make_app()

    server = HTTPServer(app)

    server.bind(8888)

    server.start(2)  # 设置启动多少个进程

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

if __name__ == "__main__":

    main()

coroutine 是给Non-blocking 函数提供异步协程的方式运行, ThreadPoolExecutor 则可以给blocking 的函数提供异步的方式运行,但是由于是多线程的,Python 使用多线程对性能来说是需要谨慎的,大量的计算量的情况可能会造成性能的下降。

相关文章

  • python-tornado简单使用

    首先附上tornado官方网站tornado(看官网最全) 安装tornado: pip installtorna...

  • 简单使用

    创建模型 过滤器 我们有一些字段和我们想让用户筛选的基础上 名称、价格或release_date。 我们创建一个 ...

  • gorange

    数组中简单使用 map中简单使用

  • 简单使用使用kaggle

    向我这样的条件不好的可以考虑借助云gpu来加速训练,借助kaggle可以在kaggle服务器上训练数据,kaggl...

  • 零碎的小程序笔记

    目录 template的简单使用WXS的简单使用npm的简单使用倒计时js的实现wx:for的使用一些js方法记录...

  • 命令行的简单使用

    Git命令行的简单使用,仅供自己使用 pod命令行的简单使用

  • 单元测试和OCMock

    OCMock使用一、安装及简单使用:使用Cocoapod引入:pod 'OCMock' 简单使用:新建一个单元测试...

  • Alamofire类似AFNetworking的简单使用和封装

    简单的使用。简单的使用。简单的使用。注定该文弱鸡一个,求拍砖。 一、介绍 Alamofire(Swift)的前身是...

  • Android ViewPager 使用总结

    ViewPager 简单使用 ViewPager + PagerAdapter简单的 View 可以使用这个实现,...

  • vuex简单简单使用记录

    1、Vuex有啥用(非官方解释)举例,组件a b 使用了同一个数据源count,当操作a的时候count++,同时...

网友评论

      本文标题:python-tornado简单使用

      本文链接:https://www.haomeiwen.com/subject/zugvzqtx.html