与mysqldb一起使用asyncio

cvxl0en2  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(659)

我在努力理解 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。

zpf6vheq

zpf6vheq1#

你真的误解了异步。您应该首先有一个异步库来获得异步支持。很明显 MySQLdb 不是。
看一看https://github.com/aio-libs/aiomysql

相关问题