Tornado 线程池应用
来源:互联网 发布:淘宝论文代笔可靠吗 编辑:程序博客网 时间:2024/06/07 07:24
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
- 2017 Multi-University Training Contest
- 创建部署 Java Web 程序(Tomcat方式/Intellij IDEA方式)
- js 图片拉伸缩放,DIV拉伸
- codeforces 367B Sereja ans Anagrams
- 使用spring框架时切面使用失败的问题
- Tornado 线程池应用
- struct device_driver
- c语言基础秀一秀
- 运算符入门总结
- 单例模式三种模式,饿汉、饱汉、双重锁模式,实例及优劣详解
- JQ获取元素的内部内容
- HDU6043KazaQ's Socks
- 使用继承HttpServlet的方法来开发Servlet
- 变量,基本类型,java运算符