本篇文章为大家展示了python中aioysql方法的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
python异步IO初探
探索异步IO执之前,先说说IO的种类
1。阻塞IO最简单,即读写数据时,需要等待操作完成,才能继续执行。进阶的做法就是用多线程来处理需要IO的部分,缺点是开销会有些大。
2。非阻塞IO,即读写数据时,如果暂时不可读写,则立刻返回,而不等待。因为不知道什么时候是可读写的,所以轮询时可能会浪费CPU时间。
3。IO复用,即在读写数据前,先检查哪些描述符是可读写的,再去读写.select和民意调查就是这样做的,它们会遍历所有被监视的描述符,查看是否满足,这个检查的过程是阻塞的。而epoll, kqueue和/dev/民意调查则做了些改进,事先注册需要检查哪些描述符的哪些事件,当状态发生变化时,内核会调用对应的回调函数,将这些描述符保存下来,下次获取可用的描述符时,直接返回这些发生变化的描述符即可。
4。信号驱动,即描述符就绪时,内核发送SIGIO信号,再由信号处理程序处理这些信号即可。不过信号处理的时机是从内核态返回用户态时,感觉也得把这些事件收集起来才好处理,有点想模拟IO复用了。
5。最后时异步IO,即读写数据时,只注册事件,内核完成读写后(读取的数据会复制到用户态),再调用事件处理函数。这整个过程都不会阻塞调用线程。
Python 3.4开始,标准库里又新增了asyncio这个模块。
从原理上来说,它和龙卷风其实差不多,都是注册IO事件,然后在输入输出回路中等待事件发生,然后调用相应的处理函数。
<强> aiomysql说明强>
<强> 1。调查强>
此库提供一个简单的连接对象用法:
import asyncio import aiomysql 时间=loop asyncio.get_event_loop () @asyncio.coroutine def 去()=,pool ,油品收率得到aiomysql.create_pool(主机=& # 39;127.0.0.1 # 39;,,=3306港 ,,,,,,,,,,用户=& # 39;根# 39;,,密码=& # 39;& # 39; ,,,,,,,,,,db=& # 39; mysql # 39;,,循环=循环) ,with (油品收率得到池),as 康涅狄格州: cur 才能=,油品收率得到conn.cursor () 油品收率才能得到cur.execute (“SELECT  10“) #,才能打印(cur.description) (r),才能=,油品收率得到cur.fetchone () assert 才能;r ==10 ,pool.close () ,油品收率得到pool.wait_closed () loop.run_until_complete (())
解释:
<代码> create_pool (minsize=1,最大尺寸=10,循环=None, * * kwargs) 代码>
一个协程,创建连接池,连接数据库
参数:
minsize (int)最小的池子,反之最大尺寸(int)
循环一个可选的事件循环实例,若未循环,使用asyncio.get_event_loop ()
回波(bool)默认日志执行SQL查询
kwargs
类池:最重要的是获得连接:
with (油品收率得到池),as 康涅狄格州: ,cur =,油品收率得到conn.cursor ()
<强> 2只;aiomysql - API参考
强>
连接该库用来连接MySQL,使用简单的aiomysql.connect(),可以连接一个数据库或者关联池子以连接更多
import asyncio #,举例说明 import aiomysql 时间=loop asyncio.get_event_loop () @asyncio.coroutine def test_example ():=,conn ,油品收率得到aiomysql.connect(主机=& # 39;127.0.0.1 # 39;,,=3306港 ,,,,,,,,,用户=& # 39;根# 39;,,密码=& # 39;& # 39;,db=& # 39; mysql # 39; ,,,,,,,,,循环=循环)=,cur ,油品收率得到conn.cursor () ,油品收率得到cur.execute (“SELECT 主机,User 得到user") ,打印(cur.description)=,r ,油品收率得到cur.fetchall () ,打印(右) ,油品收率得到cur.close () ,conn.close () loop.run_until_complete (test_example ())
<强> 3。游标游标强>
import asyncio import aiomysql 时间=loop asyncio.get_event_loop () @asyncio.coroutine def test_example ():=,conn ,油品收率得到aiomysql.connect(主机=& # 39;127.0.0.1 # 39;,,=3306港 ,,,,,,,,,用户=& # 39;根# 39;,,密码=& # 39;& # 39; ,,,,,,,,,db=& # 39; mysql # 39;,,循环=循环) ,# create default 游标=,cursor ,油品收率得到conn.cursor () ,# execute sql  query #,执行sql查询 ,油品收率得到cursor.execute (“SELECT 主机,User 得到user") ,# fetch all 结果=,r ,油品收率得到cursor.fetchall () ,# detach cursor 得到连接 ,油品收率得到cursor.close () ,# close 连接 ,conn.close () loop.run_until_complete (test_example ())python中aioysql方法的作用是什么