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之集成开发环境(IDE)
Sep 12 Python
Python实现批量修改文件名实例
Jul 08 Python
python简单读取大文件的方法
Jul 01 Python
python爬虫获取京东手机图片的图文教程
Dec 29 Python
Python使用itertools模块实现排列组合功能示例
Jul 02 Python
Python3标准库总结
Feb 19 Python
django ajax发送post请求的两种方法
Jan 05 Python
python IDLE添加行号显示教程
Apr 25 Python
基于Python组装jmx并调用JMeter实现压力测试
Nov 03 Python
Django显示可视化图表的实践
May 10 Python
python中字符串String及其常见操作指南(方法、函数)
Apr 06 Python
python热力图实现的完整实例
Jun 25 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中使用与Perl兼容的正则表达式
2006/11/26 PHP
PHP修改session_id示例代码
2014/01/08 PHP
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
destoon各类调用汇总
2014/06/20 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
2020/05/26 PHP
js multiple全选与取消全选实现代码
2012/12/04 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
2013/10/23 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
2017/10/11 Javascript
vue2实现数据请求显示loading图
2017/11/28 Javascript
详解webpack中的hash、chunkhash、contenthash区别
2018/01/05 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
Vue中this.$nextTick的作用及用法
2020/02/04 Javascript
vue 路由懒加载中给 Webpack Chunks 命名的方法
2020/04/24 Javascript
python的keyword模块用法实例分析
2015/06/30 Python
20招让你的Python飞起来!
2016/09/27 Python
Python中scatter函数参数及用法详解
2017/11/08 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
Python利用matplotlib绘制散点图的新手教程
2020/11/05 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
金融行业职业生涯规划范文
2014/01/17 职场文书
2014全国两会学习心得体会2000字
2014/03/10 职场文书
亲属关系公证书
2014/04/08 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
Python 发送SMTP邮件的简单教程
2021/06/24 Python
Win11 KB5015814遇安装失败 影响开始菜单性能解决方法
2022/07/15 数码科技