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字符串连接的N种方式总结
Sep 17 Python
Python中处理字符串之endswith()方法的使用简介
May 18 Python
python3实现暴力穷举博客园密码
Jun 19 Python
python制作websocket服务器实例分享
Nov 20 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
Dec 14 Python
python删除本地夹里重复文件的方法
Nov 19 Python
centos 安装Python3 及对应的pip教程详解
Jun 28 Python
pycharm 安装JPype的教程
Aug 08 Python
keras model.fit 解决validation_spilt=num 的问题
Jun 19 Python
python em算法的实现
Oct 03 Python
用python爬虫批量下载pdf的实现
Dec 01 Python
完美处理python与anaconda环境变量的冲突问题
Apr 07 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 FPDF类库应用实现代码
2009/03/20 PHP
PHP求最大子序列和的算法实现
2011/06/24 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
2012/09/30 PHP
php metaphone()函数及php localeconv() 函数实例解析
2016/05/15 PHP
php curl 模拟登录并获取数据实例详解
2016/12/22 PHP
实例分析10个PHP常见安全问题
2019/07/09 PHP
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
Jquery EasyUI $.Parser
2017/06/02 jQuery
jQuery实现 RadioButton做必选校验功能
2017/06/15 jQuery
layui多图上传实现删除功能的例子
2019/09/23 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
Nuxt的路由配置和参数传递方式
2020/11/06 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
[01:58]2018DOTA2亚洲邀请赛趣味视频——交流
2018/04/03 DOTA
python解析发往本机的数据包示例 (解析数据包)
2014/01/16 Python
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
用Python实现随机森林算法的示例
2017/08/24 Python
keras分类模型中的输入数据与标签的维度实例
2020/07/03 Python
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
Lulu & Georgia官方网站:购买地毯、家具、抱枕、壁纸、床上用品等
2018/03/19 全球购物
环境科学专业大学生自荐信格式
2013/09/21 职场文书
应届毕业生的自我鉴定
2013/11/13 职场文书
蔬菜基地的创业计划书
2014/01/06 职场文书
中学优秀班主任事迹材料
2014/05/01 职场文书
简历自荐信范文
2015/03/09 职场文书
比赛口号霸气押韵
2015/12/24 职场文书
听课评课活动心得体会
2016/01/15 职场文书
导游词之广东佛山(南风古灶)
2019/09/24 职场文书
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
使用javascript解析二维码的三种方式
2021/11/11 Javascript
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android