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实现简单socket程序在两台电脑之间传输消息的方法
Mar 13 Python
对Python新手编程过程中如何规避一些常见问题的建议
Apr 01 Python
简单解决Python文件中文编码问题
Nov 22 Python
Python进阶之递归函数的用法及其示例
Jan 31 Python
Django web框架使用url path name详解
Apr 29 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
Aug 27 Python
win10环境下配置vscode python开发环境的教程详解
Oct 16 Python
Python pandas RFM模型应用实例详解
Nov 20 Python
numpy ndarray 取出满足特定条件的某些行实例
Dec 05 Python
Python数据可视化:饼状图的实例讲解
Dec 07 Python
django rest framework serializers序列化实例
May 13 Python
python blinker 信号库
May 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
php.ini 中文版
2006/10/28 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
零基础php编程好学吗
2019/10/11 PHP
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
Vue 中mixin 的用法详解
2018/04/23 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
JavaScript中的事件与异常捕获详析
2019/02/24 Javascript
详解vue+axios给开发环境和生产环境配置不同的接口地址
2019/08/16 Javascript
微信小程序地图实现展示线路
2020/07/29 Javascript
简介JavaScript错误处理机制
2020/08/04 Javascript
酷! 程序员用Python带你玩转冲顶大会
2018/01/17 Python
详解Python使用tensorflow入门指南
2018/02/09 Python
pthon贪吃蛇游戏详细代码
2019/01/27 Python
Python英文文本分词(无空格)模块wordninja的使用实例
2019/02/20 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
Python关于拓扑排序知识点讲解
2021/01/04 Python
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
西班牙最大的在线滑板和街头服饰商店:Fillow.net
2019/04/15 全球购物
车间班组长的职责
2013/12/13 职场文书
党风廉设责任书
2014/04/16 职场文书
毕业设计说明书
2014/05/07 职场文书
营销总监岗位职责
2014/09/16 职场文书
个人总结与自我评价
2014/09/18 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
交通事故协议书范本
2014/11/18 职场文书
先进个人事迹材料
2014/12/29 职场文书
六年级作文之自救
2019/12/19 职场文书
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android