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爬取Coursera课程资源的详细过程
Nov 04 Python
给Python中的MySQLdb模块添加超时功能的教程
May 05 Python
Python中的推导式使用详解
Jun 03 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
Dec 31 Python
python递归打印某个目录的内容(实例讲解)
Aug 30 Python
TensorFlow 合并/连接数组的方法
Jul 27 Python
pygame游戏之旅 按钮上添加文字的方法
Nov 21 Python
django开发post接口简单案例,获取参数值的方法
Dec 11 Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 Python
如何搭建pytorch环境的方法步骤
May 06 Python
python基于openpyxl生成excel文件
Dec 23 Python
python用opencv 图像傅里叶变换
Jan 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
预告映像公开!第1章续篇剧场版动画《Princess Principal Crown Handler》4月10日上映!
2020/03/06 日漫
php 不同编码下的字符串长度区分
2009/09/26 PHP
PHP按行读取、处理较大CSV文件的代码实例
2014/04/09 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
FileUpload 控件 禁止手动输入或粘贴的实现代码
2010/04/07 Javascript
js创建对象的几种常用方式小结(推荐)
2010/10/24 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
微信小程序 绘图之饼图实现
2016/10/24 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
Angular X中使用ngrx的方法详解(附源码)
2017/07/10 Javascript
js原生代码实现轮播图的实例讲解
2017/07/28 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
Python程序中设置HTTP代理
2016/11/06 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
python中yield的用法详解
2021/01/13 Python
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
美国折扣网站:jClub
2017/08/07 全球购物
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
简历自荐信
2013/12/02 职场文书
房地产销售经理岗位职责
2014/01/01 职场文书
物流合作计划书
2014/01/10 职场文书
《特殊的葬礼》教学反思
2014/04/27 职场文书
师恩难忘教学反思
2014/04/27 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
抗震救灾标语
2014/06/26 职场文书
超市促销活动总结
2014/07/01 职场文书
社区务虚会发言材料
2014/10/20 职场文书
北京颐和园导游词
2015/01/30 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
2016年五一国际劳动节活动总结
2016/04/06 职场文书