используя asyncio с MySQLdb - PullRequest
       16

используя asyncio с MySQLdb

0 голосов
/ 13 октября 2018

Я пытаюсь понять 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.

1 Ответ

0 голосов
/ 13 октября 2018

Вы действительно неправильно поняли асинхронность.Сначала вы должны иметь асинхронную библиотеку, чтобы получить поддержку асинхронности.Очевидно, MySQLdb это не так.

Взгляните на https://github.com/aio-libs/aiomysql

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...