我使用aiomysql。我用异步访问mysql。所以我使用aiomysql。 但是,当aimysql使用时,运行时间(当aiomysql不使用时)是相同的运行时间。
from sqlalchemy import create_engine
import pymysql
pymysql.install_as_MySQLdb()
import pandas as pd
engine = create_engine("mysql+mysqldb://root:"+"qhdks12#$"+"@localhost/stock", encoding='utf-8')
conn = pymysql.connect(host='localhost', user='root', password="qhdks12#$", db='stock', charset='utf8')
cursor = conn.cursor()
def test():
for i in range(10):
sql = "select * from test;"
data = pd.read_sql(sql, conn, index_col=None)
%timeit test()
以上代码,aiomysql不使用。在Jupyter Notebook中,test()函数的运行时间为“3.1 s±39.3 ms”
import asyncio
import aiomysql as aiomysql
import pandas as pd
async def main(loop):
pool = await aiomysql.create_pool(host='127.0.0.1', port=3306, user='root', password='qhdks12#$', db='stock', loop=loop)
for i in range(2):
await test(pool, loop)
async def test(pool, loop):
async with pool.acquire() as conn:
async with conn.cursor() as cur:
await cur.execute("select * from test;")
rows = ()
rows = await cur.fetchall()
result = pd.DataFrame.from_records(list(rows))
loop = asyncio.get_event_loop()
%timeit loop.run_until_complete(main(loop))
上面的代码,aiomysql使用。在Jupyter Notebook中,主(循环)函数运行时间为“每循环3.05 s±107 ms”
运行时间相同。我认为上面的代码没有将db与异步连接起来。
所以,我通常不知道aiomysql。如何将db与异步连接???
答案 0 :(得分:2)
以下代码是同步的。如果您大声读出来,则说明您正在循环并等待每个测试完成,然后再继续。
for i in range(2):
await test(pool, loop)
要异步发送请求,您可以使用wait或collect来等待所有请求。
futures = []
for i in range(10):
futures.append( test(pool) )
done, pending = await asyncio.wait( futures, timeout=2 )