python - 熊猫矢量化
问题描述
在我的 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)
解决方案
您可以使用多线程。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 的开发人员对此很小心)
推荐阅读
- java - 如何从 QR/条形码将扫描数据插入 FireBase 实时数据库?
- sql - 试图从两列中获取数据并正确格式化它们
- android - 如何将活动移动到具有特定片段目标的另一个活动?
- scrapy - 屈服于 s3 存储桶时无法连接蜘蛛关闭
- azure-devops - 将多个现有工作项链接到排队生成(来自 Azure Devops SDK)
- django - Django:如何请求数据并同时使其可编辑
- flutter - 如何在 Flutter 中一次运行多个下载?
- prolog - 如何在 Prolog 的主体中动态地断言具有条件的规则?
- javascript - 使用 Puppeteer 从当前页面重定向到另一个页面后如何获取 URL?
- php - Laravel strtotime没有显示正确的时间