最近,在看 python 的异步编程( asyncio )部分,在使用 aiomysql 的时候遇到了困难,已经困惑我两三天了。可能是自己资质愚钝,看了 aiomysql 的官网例子( https://github.com/aio-libs/aiomysql/tree/master/examples ),我还是没能弄懂怎么才能多个数据库操作中复用 pool。下面是我的代码
import aiomysql import asyncio async def select(loop, sql): pool = await aiomysql.create_pool(host='127.0.0.1', port=3306, user='root', password='123456', db='test', loop=loop) async with pool.acquire() as conn: async with conn.cursor() as cur: await cur.execute(sql) r = await cur.fetchone() print(r) async def insert(loop, sql): pool = await aiomysql.create_pool(host='127.0.0.1', port=3306, user='root', password='123456', db='test', loop=loop) async with pool.acquire() as conn: async with conn.cursor() as cur: await cur.execute(sql) await conn.commit() async def main(loop): c1 = select(loop=loop, sql='select * from minifw') c2 = insert(loop=loop, sql="insert into minifw (name) values ('hello')") tasks = [ asyncio.ensure_future(c1), asyncio.ensure_future(c2) ] return await asyncio.gather(*tasks) if __name__ == '__main__': cur_loop = asyncio.get_event_loop() cur_loop.run_until_complete(main(cur_loop))
上面这样做的话,每次做数据库操作的时候,应该都会执行一次 create_pool
这个操作。现在我的问题是应该怎么改上面的代码,让连接池可以复用啊?
以前没怎么接触异步编程,希望大家能解答一下我的疑惑,感谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.