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单链表的简单实现方法
Sep 23 Python
python logging类库使用例子
Nov 22 Python
详解在Python中处理异常的教程
May 24 Python
python进阶_浅谈面向对象进阶
Aug 17 Python
Python numpy生成矩阵、串联矩阵代码分享
Dec 04 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
Python装饰器基础概念与用法详解
Dec 22 Python
Python Numpy库安装与基本操作示例
Jan 08 Python
python3实现斐波那契数列(4种方法)
Jul 15 Python
解决PDF 转图片时丢文字的一种可能方式
Mar 04 Python
python自动化测试通过日志3分钟定位bug
Nov 20 Python
Pyhton爬虫知识之正则表达式详解
Apr 01 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的简易冒泡法代码分享
2012/08/28 PHP
JavaScript 判断浏览器类型及版本
2009/02/21 Javascript
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
jquery-syntax动态语法着色示例代码
2014/05/14 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
解决vue-cli中stylus无法使用的问题方法
2017/06/19 Javascript
layui从数据库中获取复选框的值并默认选中方法
2018/08/15 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
python计算时间差的方法
2015/05/20 Python
在MAC上搭建python数据分析开发环境
2016/01/26 Python
浅谈Python的文件类型
2016/05/30 Python
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
python读取hdfs上的parquet文件方式
2020/06/06 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
关于iframe跨域使用postMessage的实现
2019/10/29 HTML / CSS
英国马莎百货官网:Marks & Spencer
2016/07/29 全球购物
Willer台湾:日本高速巴士/夜行巴士预约
2017/07/09 全球购物
优秀本科生求职推荐信
2014/02/24 职场文书
中华美德颂演讲稿
2014/05/20 职场文书
2014年宣传工作总结
2014/11/18 职场文书
酒店员工手册范本
2015/05/14 职场文书
茶花女读书笔记
2015/06/29 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL