在tornado中使用异步mysql操作
在使用tornado框架进行开发的过程中,发现tornado的mysql数据库操作并不是一步的,造成了所有用户行为的堵塞.tornado本身是一个异步的框架,要求所有的操作都应该是异步的,但是数据库这一层就把整个服务器都拖住了.
##查找到的解决办法:
使用异步的mysql操作库. 查找了一下,有两个比较完善的异步操作库
一个是AsyncTorndb,国人自己写的异步操作,看了一下,好像不错的样子,但是没有响应的测试用例,不敢用.一个是Tornado-MySQL是对PyMySQL的异步化的一个库,测试用例,文档,都比较齐全,可以尝试使用.
2.仿照(torngas)[https://github.com/mqingyn/torngas]的异步线程池,使用tornado的concurrent.run_on_executor装饰器对数据库操作进行异步化
3.使用任务队列,太过麻烦,对之前的代码修改过大,不使用该方案
- 在使用Tornado-MySQL过程中,发现对现有代码更改太过严重,放弃,使用了异步线程池的方式.做到最小的代码更改以及异步数据库操作的实现
##如何使用异步线程池concurrent.run_on_executor
在原先的同步的数据库执行的方法添加@concurrent.run_on_executor装饰器,如以下例子:
1234567
@concurrent.run_on_executor def runSql(self): t = time.time() db = client.conn() db.execute('''select * from TABLE_CONSTRAINTS join (CHARACTER_SETS,STATISTICS)''') db.close() return time.time() - t
在调用该方法的函数使用yield tornado.gen.Task(functionName) 调用上面的修改的方法,并且为主函数添加@tornado.gen.engine装饰器,如以下例子(tordona框架中的requestHander中的get方法):
123456789
@tornado.web.asynchronous@tornado.gen.enginedef get(self, *args, **kwargs): # print self.get_query_argument("test11") time = yield tornado.gen.Task(self.runSql) print time self.write(unicode(time)) print "over" self.finish()
*使用@tornado.web.asynchronous 装饰器取消requestHander的自动finish,不然无法等待异步sql执行完毕再返回数据
转载于:https://www.cnblogs.com/b02330224/p/10203357.html
在tornado中使用异步mysql操作相关推荐
- mysql中工资表,MySQL操作工资表,获取累计工资和月平均工资
根据一个实际的需求案例,描述一下:如何在工资条中添加获取累计工资[字段]和月平均工资[字段] 这个需求存在一个前后端分离的微服务EHR项目中,通过两个SQL语句来实现.业务逻辑:前端调用一个接口,返回 ...
- ubuntupython连接数据库_Ubuntu中python的mysql操作
1.在已经安装了python和MySQL数据库的前提下使用pip3 install PyMySQL命令 2. 建立链接: (1)首先使用命令python 进入编程模式,再导入包: import pym ...
- tornado学习笔记day08-tornado中的异步
概述 应为epoll主要用来解决网络的并发问题,所以tornado中的异步也是主要体现在网络的IO异步上,即异步web请求 tornado.httpclient.AsyncHTTPClient tor ...
- ubuntu中mysql操作_uBuntu下安装MySql,及mySql操作!
1. 从网上安装 sudo apt-get install mysql-server.装完已经自动配置好环境变量,可以直接使用mysql的命令. 注:建议将/etc/apt/source.list中的 ...
- peewee的使用与异步peewee-async在tornado中的使用总结
peewee是数据库ORM操作的第三方库. 文章目录 建表 保存数据 查询 更新和删除 tornado使用异步ORM库peewee-async 建表 from datetime import date ...
- Mysql中对table的操作问题
今天利用一个mysql问题来对前期学习Mysql操作的一个小小的检验!!现在总结一下Mysql中对表格的建立.插入特定的数据.以及查询满足某一段条件的数据等等进行操作. 首先需要建立如下三个表(tab ...
- aspx mysql类_aspx中的mysql操作类sqldatasource使用示例分享
复制代码 代码如下: /p> "http://www.w3.org/TR/xhtmlll/DTD/xhtmlll.dtd"> asp.net to mysql asp. ...
- 关于tornado的异步耗时操作假设
tornado 如果遇到耗时的操作,可不可以这样 把耗时操作放在一个由 python进程池维护的 pool中, 用 webapi封装起来, 然后tornado 接收客户端请求后,遇到耗时操作就 与访问 ...
- Ubuntu 中Mysql 操作
一.mysql服务操作 0.查看数据库版本 sql-> status; 1.net start mysql //启动mysql服务 2.net stop mysql //停止mysql服务 3. ...
最新文章
- sql语句动态创建连接服务器
- 使用Junit4时问题
- 题解 DTOJ #1515.三塔合一
- Spring Cloud【Finchley】-12使用Hystrix Dashboard实现Hystrix数据的可视化监控
- dba的前景_2019年DBA薪资大起底,你拖后腿了吗?
- android 源码各版本下载 原生纯净版
- 2021云栖大会,打卡IoT最全攻略
- meta标签的用处详解
- 如何让CloudStack使用KVM创建Windows实例成功识别并挂载数据盘
- 【LeetCode笔记】88. 合并两个有序数组(Java、双指针)
- python中fd是什么意思_python里fd是什么意思
- vux 使用 font-awesome
- magxfer FTP 组件 的使用例子
- https理论与实践
- 华三交换机链路聚合的几点思考
- 进展-Silverlight5、 windows phone 7、pc 三栖引擎,2D核心已完成
- 编译原理实验1——词法分析器设计
- 拉普拉斯变换和Z变换表
- 《熊出没·原始时代》首映 导演点赞宋祖儿配音
- 泰迪云课堂数据分析案例:广电大数据营销推荐项目
热门文章
- mysql gtids_MySQL GTIDs(global transaction identifiers)
- IPTV视频码流分析
- 手机能上wifi电脑不行_电脑如何当Wifi供手机使用
- PHP的continue语句,PHP continue语句
- java调用geckofx_Scala学习(三)数组相关操作
- android+1m的大小,android raw读取超过1M文件的方法
- MySql优化神器 Explain工具介绍
- Windows Servers2019没有无线网卡驱动
- python删除文件夹中的jpg_python删除文件夹下相同文件和无法打开的图片
- 运用CSS3制作3D盒子骰子