Tornado 线程池应用
来源:互联网 发布:网约车软件排行 编辑:程序博客网 时间:2024/06/08 17:22
Tornado是一个异步框架,在异步操作的时候能提升程序的处理性能。但是如果在程序中碰到同步的逻辑,由于GIL的关系,会直接卡死,导致性能急剧下降。
目前对于mongodb以及redis都有比较不错的异步框架,但是对于Mysql,目前的异步框架都不是很成熟。
在实际应用中,由于一开始不是特别了解,在用了Tornado框架的同时,采用了Sqlalchemy来处理Mysql数据。但是由于这部分Mysql操作是同步的,在并发量上去的时候,不能及时返回,大量请求被拒绝。
由于替换Sqlalchemy会造成很大的工作量,经过研究之后发现Tornado有run_on_executor,可以利用线程池达到异步化的目的。
Decorator to run a synchronous method asynchronously on an executor.
The decorated method may be called with a callback keyword argument and returns a future.
The IOLoop and executor to be used are determined by the io_loop and executor attributes of self. To use different attributes, pass keyword arguments to the decorator
#!/bin/env pythonimport tornado.httpserverimport tornado.ioloopimport tornado.optionsimport tornado.webimport tornado.httpclientimport tornado.genfrom tornado.concurrent import run_on_executor# 这个并发库在python3自带;在python2需要安装sudo pip install futuresfrom concurrent.futures import ThreadPoolExecutorimport timefrom tornado.options import define, optionsdefine("port", default=8002, help="run on the given port", type=int)class SleepHandler(tornado.web.RequestHandler): executor = ThreadPoolExecutor(2) def get(self): tornado.ioloop.IOLoop.instance().add_callback(self.sleep) # 这样将在下一轮事件循环执行self.sleep self.write("when i sleep") @run_on_executor def sleep(self): time.sleep(5) print("yes") return 5if __name__ == "__main__": tornado.options.parse_command_line() app = tornado.web.Application(handlers=[ (r"/sleep", SleepHandler), ]) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
当然也可以用celery来达到异步的效果,但是不如run_on_executor来的方便
阅读全文
0 0
- Tornado 线程池应用
- Tornado 线程池应用
- tornado io 阻塞 线程
- tornado tcpclient 应用实例
- tornado应用结构
- tornado单线程服务器配置
- Python+Tornado+Apache创建应用
- Tornado应用笔记01-简介
- Tornado框架08-应用安全
- Tornado Web 应用的结构
- Tornado官方文档(五)【tornado web应用框架】
- tornado
- Tornado
- Tornado
- tornado
- Tornado
- tornado
- tornado
- HDOJ 1754 I hate it(线段树+区间最大值)
- HTML基础学习二
- mac下安装opencv并用python做人脸识别
- 文章标题
- oracle的序列化和索引查找
- Tornado 线程池应用
- Navicat Premium for MAC中文破解版下载|及Oracle连接的一些问题
- C# 三层架构之系统的登录验证与添加数据的实现
- POJ 1753 dfs+枚举
- 2017ccpc网络赛
- tomcat服务器打不开jsp文件 错误404
- 配置arm-linux虚拟机开发环境
- MySQL常用命令
- 京东2018秋招编程题