zoukankan      html  css  js  c++  java
  • 16、【翻译】aiomysql-Pool

    本文翻译自:Pool-aiomysql 0.0.9 documentation

    Pool

    该库提供连接池以及普通连接对象。

    基本用法是:

    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=1maxsize=10loop=None**kwargs)

    ——创建与MySQL数据库的连接池的协程。

    参数:

    • minsize (int) – 连接池的最少连接数目
    • maxsize (int) – 连接池的最大连接数据
    • loop – 是一个可选的事件循环实例,如果未指定loop,则使用asyncio.get_event_loop()
    • echo (bool) – – 执行日志SQL查询(默认为False)
    • kwargs – 该函数接受aiomysql.connect()所需的所有参数,以及可选的关键字参数loop,minsize,maxsize。

    返回:

      Pool实例

    Pool类

     一个连接池

    Pool被创建后,拥有minsize指定的空闲连接,并且能延展到maxsize制定的连接数;

    如果minsize为0,则Pool在启动时不会创建任何连接;

    如果maxsize为0,则Pool的大小无限制(但当然,它会回收已使用结束的连接);

    使用Pool的最重要的方式是获取数据库连接,用下列语句:

    with (yield from pool) as conn:
        cur = yield from conn.cursor()

    如不想使用with语句,可另行参考 Pool.acquire()Pool.release()的方式获取数据库连接。

    Pool类的属性:

    1、echo : 返回echo模式状态。 如果为True,则将所有已执行的查询记录到名为aiomysql的logger;

    2、minsize : Pool的最小大小(只读),默认为1;

    3、maxsize : Pool的最大大小(只读),默认为10;

    4、size : 当前Pool的大小(只读),包括使用的和空闲的连接;

    5、freesize : Pool中空闲连接的数目(只读);

    方法:

    1、clear()

    关闭pool

    标记所有要关闭的pool连接,已经关闭的pool不允许获得新的连接;

    如果你想等待已经获得的连接的实际关闭,请  close()方法后调用wait_closed()

    警告:该方法不是一个协程!

    2、terminate()

    终止pool,关闭pool并立即关闭所有已获取的连接。

    在terminate()方法后要调用wait_closed()来等待实际的关闭。

    警告:该方法不是一个协程!

    3、wait_closed()

    一个等待释放和关闭所有已获取连接的协程;

    应该在close()之后调用以等待实际的pool关闭。

    4、acquire()

    从空闲的pool中获取连接的协程。 根据需要创建新连接,并且pool的大小小于maxsize。

    返回一个Connection实例。

    5、release(conn)

    将连接conn转换至空闲pool中,以供将来重复利用。

    最后再贴出另一种使用connection pool方式的示例代码:

    import asyncio
    import aiomysql
    
    
    async def test_example(loop):
        pool = await aiomysql.create_pool(host='127.0.0.1', port=3306,
                                          user='root', password='',
                                          db='mysql', loop=loop)
        async with pool.acquire() as conn:
            async with conn.cursor() as cur:
                await cur.execute("SELECT 42;")
                print(cur.description)
                (r,) = await cur.fetchone()
                assert r == 42
        pool.close()
        await pool.wait_closed()
    
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(test_example(loop))
  • 相关阅读:
    [css] BFC规则以及解决方法
    [css] 利用border制作三角型
    初学java注解编程 记录错误及解决办法
    springmvc 注解 配置文件解释
    log4net详解(转载)
    数据库的隔离级别
    Arcgis 几何网络分析
    Spring配置文件详解 – applicationContext.xml文件路径
    wpf 线程
    wpf 保存控件中的内容为图片格式
  • 原文地址:https://www.cnblogs.com/zwb8848happy/p/8809861.html
Copyright © 2011-2022 走看看