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 相关文章推荐
Linux下使用python自动修改本机网关代码分享
May 21 Python
Python中.py文件打包成exe可执行文件详解
Mar 22 Python
Python OpenCV获取视频的方法
Feb 28 Python
高效使用Python字典的清单
Apr 04 Python
python中如何使用分步式进程计算详解
Mar 22 Python
numpy:找到指定元素的索引示例
Nov 26 Python
python 实现目录复制的三种小结
Dec 04 Python
python如何操作mysql
Aug 17 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
Oct 20 Python
TensorFlow2.0使用keras训练模型的实现
Feb 20 Python
用python画城市轮播地图
May 28 Python
opencv读取视频并保存图像的方法
Jun 04 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
星际争霸任务指南——虫族
2020/03/04 星际争霸
php 判断IP为有效IP地址的方法
2018/01/28 PHP
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
2018/09/19 Javascript
Bootstrap 实现表格样式、表单布局的实例代码
2018/12/09 Javascript
微信小程序自定义toast组件的方法详解【含动画】
2019/05/11 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
ES6对象操作实例详解
2020/05/23 Javascript
vue中v-for循环选中点击的元素并对该元素添加样式操作
2020/07/17 Javascript
js实现盒子拖拽动画效果
2020/08/09 Javascript
详解python中requirements.txt的一切
2017/03/03 Python
python实现自动登录
2018/09/17 Python
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
2019/07/06 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
法国体育用品商店:GO Sport
2019/10/23 全球购物
写好求职信第一句话的技巧
2013/10/26 职场文书
电大本科自我鉴定
2014/02/05 职场文书
出纳员岗位责任制
2014/02/11 职场文书
机关党员三严三实心得体会
2014/10/13 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
2015医德医风个人工作总结
2015/04/02 职场文书
后天观后感
2015/06/08 职场文书
奠基仪式致辞
2015/07/30 职场文书
SQL Server中的游标介绍
2022/05/20 SQL Server