python中aioysql(异步操作MySQL)的方法


Posted in Python onApril 11, 2019

python异步IO初探

探索异步IO执之前,先说说IO的种类

1.阻塞IO最简单,即读写数据时,需要等待操作完成,才能继续执行。进阶的做法就是用多线程来处理需要IO的部分,缺点是开销会有些大。

2.非阻塞IO,即读写数据时,如果暂时不可读写,则立刻返回,而不等待。因为不知道什么时候是可读写的,所以轮询时可能会浪费CPU时间。

3.IO复用,即在读写数据前,先检查哪些描述符是可读写的,再去读写。select 和 poll 就是这样做的,它们会遍历所有被监视的描述符,查看是否满足,这个检查的过程是阻塞的。而 epoll、kqueue 和/dev/poll 则做了些改进,事先注册需要检查哪些描述符的哪些事件,当状态发生变化时,内核会调用对应的回调函数,将这些描述符保存下来;下次获取可用的描述符时,直接返回这些发生变化的描述符即可。

4.信号驱动,即描述符就绪时,内核发送SIGIO信号,再由信号处理程序处理这些信号即可。不过信号处理的时机是从内核态返回用户态时,感觉也得把这些事件收集起来才好处理,有点想模拟IO复用了。

5.最后时异步IO,即读写数据时,只注册事件,内核完成读写后(读取的数据会复制到用户态),再调用事件处理函数。这整个过程都不会阻塞调用线程。

Python 3.4 开始,标准库里又新增了 asyncio 这个模块。

从原理上来说,它和 Tornado 其实差不多,都是注册 IO 事件,然后在 IO loop 中等待事件发生,然后调用相应的处理函数。

aiomysql说明

1. poll

此库提供一个简单的连接对象用法:

import asyncio
import aiomysql
loop = asyncio.get_event_loop()
@asyncio.coroutine
def go()
 pool = yield from aiomysql.create_pool(host='127.0.0.1', port=3306,
           user='root', password='',
           db='mysql', loop=loop)
 with (yield from pool) as conn:
  cur = yield from conn.cursor()
  yield from cur.execute("SELECT 10")
  # print(cur.description)
  (r,) = yield from cur.fetchone()
  assert r == 10
 pool.close()
 yield from pool.wait_closed()
loop.run_until_complete(go())

解释:

create_pool(minsize=1, maxsize=10, loop=None, **kwargs)

一个协程,创建连接池,连接database

参数:

minsize(int)最小的池子 , 反之maxsize(int)
loop一个可选的事件循环实例,若未循环,使用 asyncio.get_event_loop()
echo(bool)默认log执行SQL查询
kwargs
Class pool:最重要的是获得连接:

with (yield from pool) as conn:
 cur = yield from conn.cursor()

2.  aiomysql — API Reference

connection

该库用来连接MySQL,使用简单的aiomysql.connect(),可以连接一个数据库或者关联池子以连接更多

import asyncio # 举例说明
import aiomysql
loop = asyncio.get_event_loop()
@asyncio.coroutine
def test_example():
 conn = yield from aiomysql.connect(host='127.0.0.1', port=3306,
          user='root', password='', db='mysql',
          loop=loop)
 cur = yield from conn.cursor()
 yield from cur.execute("SELECT Host,User FROM user")
 print(cur.description)
 r = yield from cur.fetchall()
 print(r)
 yield from cur.close()
 conn.close()
loop.run_until_complete(test_example())

3. Cursors 游标

import asyncio
import aiomysql
loop = asyncio.get_event_loop()
@asyncio.coroutine
def test_example():
 conn = yield from aiomysql.connect(host='127.0.0.1', port=3306,
          user='root', password='',
          db='mysql', loop=loop)
 # create default cursor
 cursor = yield from conn.cursor()
 # execute sql query # 执行sql查询
 yield from cursor.execute("SELECT Host, User FROM user")
 # fetch all results
 r = yield from cursor.fetchall()
 # detach cursor from connection
 yield from cursor.close()
 # close connection
 conn.close()
loop.run_until_complete(test_example())

总结

以上所述是小编给大家介绍的aioysql(异步操作MySQL)-python,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
Python实现屏幕截图的代码及函数详解
Oct 01 Python
python rsa 加密解密
Mar 20 Python
django文档学习之applications使用详解
Jan 29 Python
python定向爬取淘宝商品价格
Feb 27 Python
Python3.7实现中控考勤机自动连接
Aug 28 Python
Python字符串的常见操作实例小结
Apr 08 Python
pytorch中nn.Conv1d的用法详解
Dec 31 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
Feb 11 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
Mar 12 Python
Python datetime模块使用方法小结
Jun 18 Python
Python numpy矩阵处理运算工具用法汇总
Jul 13 Python
Python3爬虫关于识别点触点选验证码的实例讲解
Jul 30 Python
很酷的python表白工具 你喜欢我吗
Apr 11 #Python
2019 Python最新面试题及答案16道题
Apr 11 #Python
【python】matplotlib动态显示详解
Apr 11 #Python
python爬虫之验证码篇3-滑动验证码识别技术
Apr 11 #Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
Apr 11 #Python
python面试题小结附答案实例代码
Apr 11 #Python
Python3使用Matplotlib 绘制精美的数学函数图形
Apr 11 #Python
You might like
fleaphp下不确定的多条件查询的巧妙解决方法
2008/09/11 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
部署PHP项目应该注意的几点事项分享
2013/12/20 PHP
php通过smtp邮件验证登陆的方法
2016/05/11 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
自己的js工具 Event封装
2009/08/21 Javascript
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
分享20款好玩的jQuery游戏
2011/04/17 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
js闭包的用途详解
2014/11/09 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
JavaScript 判断iPhone X Series机型的方法
2019/01/28 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
2020/03/04 Javascript
numpy中索引和切片详解
2017/12/15 Python
python实现socket+threading处理多连接的方法
2019/07/23 Python
Django用户认证系统 User对象解析
2019/08/02 Python
python生成并处理uuid的实现方式
2020/03/03 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
2020/05/20 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
2020/11/24 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
python编程的核心知识点总结
2021/02/08 Python
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
巴西最大的运动品牌:Olympikus
2020/07/14 全球购物
后勤人员自我评价怎么写
2013/09/19 职场文书
旅游饭店管理专业自荐书
2014/06/28 职场文书
酒店端午节活动方案
2014/08/26 职场文书
公司放假通知范文
2015/04/14 职场文书
2015年小学重阳节活动总结
2015/07/29 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书