在使用tornado框架进行开发的过程中,发现tornado的mysql数据库操作并不是一步的,造成了所有用户行为的堵塞.tornado本身是一个异步的框架,要求所有的操作都应该是异步的,但是数据库这一层就把整个服务器都拖住了.

##查找到的解决办法:

  1. 使用异步的mysql操作库. 查找了一下,有两个比较完善的异步操作库
    一个是AsyncTorndb,国人自己写的异步操作,看了一下,好像不错的样子,但是没有响应的测试用例,不敢用.

    一个是Tornado-MySQL是对PyMySQL的异步化的一个库,测试用例,文档,都比较齐全,可以尝试使用.

2.仿照(torngas)[https://github.com/mqingyn/torngas]的异步线程池,使用tornado的concurrent.run_on_executor装饰器对数据库操作进行异步化

3.使用任务队列,太过麻烦,对之前的代码修改过大,不使用该方案

  • 在使用Tornado-MySQL过程中,发现对现有代码更改太过严重,放弃,使用了异步线程池的方式.做到最小的代码更改以及异步数据库操作的实现

##如何使用异步线程池concurrent.run_on_executor

  1. 在原先的同步的数据库执行的方法添加@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
  1. 在调用该方法的函数使用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操作相关推荐

  1. mysql中工资表,MySQL操作工资表,获取累计工资和月平均工资

    根据一个实际的需求案例,描述一下:如何在工资条中添加获取累计工资[字段]和月平均工资[字段] 这个需求存在一个前后端分离的微服务EHR项目中,通过两个SQL语句来实现.业务逻辑:前端调用一个接口,返回 ...

  2. ubuntupython连接数据库_Ubuntu中python的mysql操作

    1.在已经安装了python和MySQL数据库的前提下使用pip3 install PyMySQL命令 2. 建立链接: (1)首先使用命令python 进入编程模式,再导入包: import pym ...

  3. tornado学习笔记day08-tornado中的异步

    概述 应为epoll主要用来解决网络的并发问题,所以tornado中的异步也是主要体现在网络的IO异步上,即异步web请求 tornado.httpclient.AsyncHTTPClient tor ...

  4. ubuntu中mysql操作_uBuntu下安装MySql,及mySql操作!

    1. 从网上安装 sudo apt-get install mysql-server.装完已经自动配置好环境变量,可以直接使用mysql的命令. 注:建议将/etc/apt/source.list中的 ...

  5. peewee的使用与异步peewee-async在tornado中的使用总结

    peewee是数据库ORM操作的第三方库. 文章目录 建表 保存数据 查询 更新和删除 tornado使用异步ORM库peewee-async 建表 from datetime import date ...

  6. Mysql中对table的操作问题

    今天利用一个mysql问题来对前期学习Mysql操作的一个小小的检验!!现在总结一下Mysql中对表格的建立.插入特定的数据.以及查询满足某一段条件的数据等等进行操作. 首先需要建立如下三个表(tab ...

  7. aspx mysql类_aspx中的mysql操作类sqldatasource使用示例分享

    复制代码 代码如下: /p> "http://www.w3.org/TR/xhtmlll/DTD/xhtmlll.dtd"> asp.net to mysql asp. ...

  8. 关于tornado的异步耗时操作假设

    tornado 如果遇到耗时的操作,可不可以这样 把耗时操作放在一个由 python进程池维护的 pool中, 用 webapi封装起来, 然后tornado 接收客户端请求后,遇到耗时操作就 与访问 ...

  9. Ubuntu 中Mysql 操作

    一.mysql服务操作 0.查看数据库版本 sql-> status; 1.net start mysql //启动mysql服务 2.net stop mysql //停止mysql服务 3. ...

最新文章

  1. sql语句动态创建连接服务器
  2. 使用Junit4时问题
  3. 题解 DTOJ #1515.三塔合一
  4. Spring Cloud【Finchley】-12使用Hystrix Dashboard实现Hystrix数据的可视化监控
  5. dba的前景_2019年DBA薪资大起底,你拖后腿了吗?
  6. android 源码各版本下载 原生纯净版
  7. 2021云栖大会,打卡IoT最全攻略
  8. meta标签的用处详解
  9. 如何让CloudStack使用KVM创建Windows实例成功识别并挂载数据盘
  10. 【LeetCode笔记】88. 合并两个有序数组(Java、双指针)
  11. python中fd是什么意思_python里fd是什么意思
  12. vux 使用 font-awesome
  13. magxfer FTP 组件 的使用例子
  14. https理论与实践
  15. 华三交换机链路聚合的几点思考
  16. 进展-Silverlight5、 windows phone 7、pc 三栖引擎,2D核心已完成
  17. 编译原理实验1——词法分析器设计
  18. 拉普拉斯变换和Z变换表
  19. 《熊出没·原始时代》首映 导演点赞宋祖儿配音
  20. 泰迪云课堂数据分析案例:广电大数据营销推荐项目

热门文章

  1. mysql gtids_MySQL GTIDs(global transaction identifiers)
  2. IPTV视频码流分析
  3. 手机能上wifi电脑不行_电脑如何当Wifi供手机使用
  4. PHP的continue语句,PHP continue语句
  5. java调用geckofx_Scala学习(三)数组相关操作
  6. android+1m的大小,android raw读取超过1M文件的方法
  7. MySql优化神器 Explain工具介绍
  8. Windows Servers2019没有无线网卡驱动
  9. python删除文件夹中的jpg_python删除文件夹下相同文件和无法打开的图片
  10. 运用CSS3制作3D盒子骰子