Tornado的简单使用

目前python的三大框架

django是基于MTV模式的框架,大而全,开发效率高,自带ORM操作,后台管理,以及各种认证模块等;

Flask是轻量级的框架,自由,灵活,可扩展性很强;

Tornado主性能,采用异步非阻塞的方式,但很多功能模块交给了第三方去实现。

但现阶段使用tornado不是很多,尤其是现在Django3.0出了之后增加了异步处理的方式,而且开发效率上也比Tornado快,灵活性方面更多人会去选择使用Flask,而且即便是Django2+gevent使用协程的事件方式一样可以实现高并发,这块原理比较多,后面想单独总结写一篇这个。

 

Tornado目录结构

目录结构不像django会自动生成,由自己独立创建

 

 

server.py---主要是存放启动程序的代码

# coding=utf-8
import tornado.httpserver
import tornado.web
import tornado.ioloop
import tornado.escape
from tornado.options import define, options
from handlers.urls.main_urls import handlers

define("port", default=8003, help="run port", type=int)
define("start", default=False, help="start server", type=bool)

if __name__ == "__main__":
    options.parse_command_line()
    if options.start:
        app = tornado.web.Application(handlers)
        http_server = tornado.httpserver.HTTPServer(app)
        http_server.listen(options.port)
        print('start server...')
        http_server.start(4)
        tornado.ioloop.IOLoop.instance().start()

 tornado.ioloop

(1)tornado的核心io循环模块,封装了linux的epoll和BSD的kqueue,tornado高性能的基石

(2)epoll原理

(3)IOLoop.current():   返回当前线程的IOLoop实例。

(4)IOLoop.start(): 启动IOLoop实例的IO循环,同时服务器监听被打开。

http_server.start()

定义进程的数量,建议与cpu核数一致,避免上下文切换的时间消耗

 

urls目录----存放程序url的地方

from handlers.main.main_handler import SMSHandler, EmailHandler

handlers = [
    (r'/sms', SMSHandler),
(r'/test', EmailHandler) ]

 

main目录----用来存放程序代码


# coding=utf-8
import tornado.web
import tornado.httpserver
from . import mailsender

class
SMSHandler(tornado.web.RequestHandler): def initialize(self): self.mail = mailsender.MailSenderHandler() def get(self):
    self.get_query_argument('param1','')
data = {"message":"123","status":0} self.finish(data
) def post(self): self.mail.SendMail() data1 = self.get_body_argument('a1','') self.write("success")

 

 

 initialize函数类似于__init__构造方法,这里当引入其它类的方法时,可以通过先定义生成一个实例,然后再引入进本地方法中。

获取参数的方法:

GET:get_query_argument()

POST:get_body_argument(),当参数不存在时可以定义默认值


self.finish()代表响应到前端的终结。并且可以在finsh后做一些与响应给前端无关的操作,缩短响应时间。
self.write()并不会马上将数据返回前端,必须在self.finsh()或者return后才会响应,类似以缓存吧。

posted on 2020-09-14 20:25  一个梦想自由的人  阅读(571)  评论(0编辑  收藏  举报