python中aioysql方法的作用是什么

  介绍

本篇文章为大家展示了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方法的作用是什么