python tornado_python-tornado简单使用

首先附上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 使用多线程对性能来说是需要谨慎的,大量的计算量的情况可能会造成性能的下降。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值