Python 矢量化

Python 矢量化,python,sql,pandas,asynchronous,vectorization,Python,Sql,Pandas,Asynchronous,Vectorization,在python脚本中,我需要对同一数据库中类似(但不相关)的表执行一系列sql查询。每个select的输出列始终相同。有没有一种方法可以执行此异步操作以减少处理时间 tables = pd.DataFrame(['Table1, Table2, Table3'], columns=['Table Name']) sqlQuery1 = '''select a, b, c from TABLENAME''' sqlDataLst = [] for i, row in tables.iterro

在python脚本中,我需要对同一数据库中类似(但不相关)的表执行一系列sql查询。每个select的输出列始终相同。有没有一种方法可以执行此异步操作以减少处理时间

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)

您可以使用多线程。定义一个新函数(我们称之为
new\u function
),该函数获取表名作为参数,然后运行
read\u sql\u 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的开发人员对此非常小心)

您可以使用多线程。定义一个新函数(我们称之为
new\u function
),该函数获取表名作为参数,然后运行
read\u sql\u 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的开发人员对此非常小心)

可能需要逻辑。.可能需要逻辑。.在for循环中附加sqlDataLst并不能提高速度。但是,使用
future[i]=execu…
在for循环中填充一个列表,然后在该列表中循环以获取数据就成功了。谢谢:-)很高兴知道。很高兴听到这有帮助。在for循环中添加sqlDataLst并没有提高速度。但是,使用
future[i]=execu…
在for循环中填充一个列表,然后在该列表中循环以获取数据就成功了。谢谢:-)很高兴知道。很高兴听到这有帮助。