我在努力理解 asyncio
以及如何在mysqldb中使用它。我想我只是不明白asyncio是怎么工作的。例如,假设我想同时异步执行两个查询。例如,如果没有async,我要做两个查询,那么我可能会像这样做
import MySQLdb
def test1():
conn = MySQLdb.connect('host', 'user', 'password', 'db')
conn.query('FIND * FROM table1')
return conn.store_result().fetch_row(numrows=0, how=1)
conn.close()
def test1():
conn = MySQLdb.connect('host', 'user', 'password', 'db')
conn.query('FIND * FROM table2')
return conn.store_result().fetch_row(numrows=0, how=1)
conn.close()
if __name__ == '__main__':
foo1 = test1()
foo2 = test2()
这很慢,因为它需要从 test1()
在开始之前 test2()
. 我的理解是这就是 asyncio
帮助,因为它可以启动一个函数,然后放开控件执行第二个函数。我以为你是通过使用 async
然后说在函数中用 await
但我很确定我误解了。这就是我要做的:
import asyncio
import MySQLdb
async def test1():
conn = await MySQLdb.connect('host', 'user', 'password', 'db')
await conn.query('FIND * FROM table1')
conn.close()
return conn.store_result().fetch_row(numrows=0, how=1)
async def test1():
conn = await MySQLdb.connect('host', 'user', 'password', 'db')
await conn.query('FIND * FROM table2')
conn.close()
return conn.store_result().fetch_row(numrows=0, how=1)
if __name__ == '__main__':
loop = sayncio.get_event_loop()
loop.run_until_complete(asyncio.gather(test1(), test2()))
loop.close()
这不管用。有没有一种方法可以用这种方式对mysqldb进行异步查询?我使用的是python3.6。
1条答案
按热度按时间zpf6vheq1#
你真的误解了异步。您应该首先有一个异步库来获得异步支持。很明显
MySQLdb
不是。看一看https://github.com/aio-libs/aiomysql