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 24 Python
Pyhton中防止SQL注入的方法
Feb 05 Python
在Python程序中操作文件之flush()方法的使用教程
May 24 Python
Python代码解决RenderView窗口not found问题
Aug 28 Python
Python简单的制作图片验证码实例
May 31 Python
运行django项目指定IP和端口的方法
May 14 Python
python实现爬取图书封面
Jul 05 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
如何使用django的MTV开发模式返回一个网页
Jul 22 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
Python实现的北京积分落户数据分析示例
Mar 27 Python
Python中的min及返回最小值索引的操作
May 10 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
php 无法载入mysql扩展
2010/03/12 PHP
关于file_get_contents返回为空或函数不可用的解决方案
2013/06/24 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
2016/07/20 PHP
ThinkPHP中session函数详解
2016/09/14 PHP
php+js实现百度地图多点标注的方法
2016/11/30 PHP
Javascript 中的类和闭包
2010/01/08 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
使用vue的v-for生成table并给table加上序号的实例代码
2017/10/27 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
JavaScript onclick事件使用方法详解
2020/05/15 Javascript
Javascript基于OOP实实现探测器功能代码实例
2020/08/26 Javascript
[57:50]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第二局
2016/03/05 DOTA
Python 文件操作实现代码
2009/10/07 Python
Python调用C语言开发的共享库方法实例
2015/03/18 Python
Python中的自省(反射)详解
2015/06/02 Python
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
python实现二叉树的遍历
2017/12/11 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
Python3.4解释器用法简单示例
2019/03/22 Python
Python 字典中的所有方法及用法
2020/06/10 Python
keras 读取多标签图像数据方式
2020/06/12 Python
浅谈matplotlib 绘制梯度下降求解过程
2020/07/12 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
python regex库实例用法总结
2021/01/03 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
英国景点门票网站:attractiontix
2019/08/27 全球购物
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
行政办公员自我评价分享
2013/12/14 职场文书
档案保密承诺书
2014/06/03 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
防汛通知
2015/04/25 职场文书
高一作文之乐趣
2019/11/21 职场文书