Я пытаюсь понять asyncio
и как использовать его с MySQLdb.Я думаю, что просто не понимаю, как работает Asyncio.Например, скажем, я хочу асинхронно выполнять два запроса одновременно.Например, без асинхронного выполнения, и я делаю два запроса, я мог бы сделать это как
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 таким образом?Я использую Python 3.6.