首页 > 解决方案 > 熊猫矢量化

问题描述

在我的 python 脚本中,我需要对同一个数据库中的类似(但不相关)表执行一系列 sql 查询。每个选择的输出列总是相同的。有没有办法执行这种异步以减少处理时间?

tables =  pd.DataFrame(['Table1, Table2, Table3'], columns=['Table Name'])
sqlQuery1 = '''select a, b, c from TABLENAME'''

sqlDataLst = []
for i, row in tables.iterrows():
    
    sqlQuery1_exe= sqlQuery1.replace("TABLENAME",row['Table Name'])
    sqlData = pd.read_sql_query(sqlQuery1_exe,getConn())
    sqlDataLst.append(sqlData)
        
sqlDataAll = pd.concat(sqlDataLst)

标签: pythonsqlpandasasynchronousvectorization

解决方案


您可以使用多线程。new_function定义一个将表名作为参数然后运行的新函数(我们称之为) read_sql_query

from concurrent.futures import ThreadPoolExecutor

with ThreadPoolExecutor(max_workers=10) as executor:
   for i, row in tables.iterrows():
      future = executor.submit(new_function, row['Table Name'])

注意:当你在 python 中使用多线程时,你应该注意 GIL(Pandas 的开发人员对此很小心)


推荐阅读