python中aioysql(异步操作MySQL)的方法
作者:Devil- 发布时间:2024-01-15 22:15:26
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,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
来源:https://www.cnblogs.com/devils19/archive/2019/04/11/10689025.html
猜你喜欢
- 需求细化:1.身份证必须能够通过身份证校验程序。2.通过查询,发现身份证号码是有国家标准的,标准号为 GB 11643-1999 可以从百度
- 本文实例讲述了Python事务操作实现方法。分享给大家供大家参考,具体如下:#coding=utf-8import sysimport My
- 最近老婆大人的公司给老婆大人安排了一个根据关键词查询google网站排名的差事。老婆大人的公司是做seo的,查询的关键词及网站特别的多,看着
- Msg 102, Level 15, State 1, Line 3 Incorrect syntax near '+'.
- 前言今天教大家用wrodcloud模块来生成词云,我读取了一篇小说并生成了词云,先看一下效果图:效果图一:效果图二:根据效果图分析的还是比较
- 这个间歇性向上滚动js代码很适合做广告展示,友情链接等等。与平常的无缝向上连续滚动不同的是它每滚动一个就会停顿一会儿。<!DOCTYP
- 本文实例总结了python选择排序算法。分享给大家供大家参考。具体如下:代码1:def ssort(V):#V is the list to
- 前言这段时间刚刚学习了一段时间的Python,加上自己是做iOS开发的,就想着用Python来做一个自动化打包,可以自动完成打包,上传到蒲公
- 本文实例讲述了MySQL学习笔记之数据定义表约束,分页方法。分享给大家供大家参考,具体如下:1. primary key 主键特点:主键是用
- 事件处理,是 GUI 程序中不可或缺的重要组成部分,相比来说,控件只是组成一台机器的零部件, 而事件处理则是驱动这台机器&ldquo
- python中index()、find()方法,具体内容如下:index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(
- 本文实例讲述了Python异步操作MySQL。分享给大家供大家参考,具体如下:安装aiomysql依赖Python3.4+asyncioPy
- 本文为大家分享的Python工程师面试题主要与Python Web相关,供大家参考,具体内容如下1、解释一下 WSGI 和 FastCGI
- 相信有些小伙伴,在没接触py之前,肯定都是有所准备的,想学语言由来已久,拿小编来说,一直趁着空挡就开始找课程学习,用记下学习历程,还会向一些
- 本文实例为大家分享了python实现简单贪吃蛇的具体代码,供大家参考,具体内容如下1. 导入游戏库import pgzrunimport r
- 小孩子刚刚开始学说话的时候,常常是一个字一个字地开始学,比如学说“饺子”,对他/她来讲,似乎有点难度,大人也聪明,于是就简化了,用“饺饺”来
- mysql的in会让索引失效吗?不会! 看结果:mysql> desc select * from tb_province where
- 目录简述:1. 事务的四大特性2.多事务并发带来的问题3.事务的隔离级别4.演示不同隔离级别出现的问题读未提交读已提交可重复读串行化5.锁机
- 说明define function,calculate the input parameters and return the result
- PHP作为开源语言,发展至今已有很多成熟的国内外开源系统,足以满足个人和企业用户自己建立WEB站点,下面则主要介绍PHP建站的流程和步骤。不