我有以下查询返回日期范围之间的数据。
dates = ['20100101','20100201',20100301','20100401']
query = 'select date, company_name, total_amount from info_stats where date between 'start_date' and 'end_date'
我从另一个进程获取日期范围并构造一个列表,以便我可以按如下方式迭代:
pds = []
for idx in range(0, len(dates) - 1):
formated_query = self.get_formated_query(start_date=dates[idx].strftime('%Y%m%d'),
end_date=dates[idx + 1].strftime('%Y%m%d')
results_df = pds.append(pd.read_sql(sql=formated_query,con=db_connect))
查询我在index
和index + 1
传递日期(日期大于索引日期(
这些查询需要超长的时间,我想以并行化的方式执行,以便等待时间更短。我过去了joblib
但不确定这是multi-threading
还是multi-processing
.看起来像前者。同样是joblib
新手,如何使用joblib
或其他包并行化上面的代码?
这个问题相当广泛,但我可以分享我自己对数据库并行查询的经验。
我发现,如果我有很多小工作,我可以使用python内置的多线程模块,如concurrent.futures。我会加快速度。
但是,如果我有需要很长时间才能在数据库上运行的大型作业,则并行化无济于事。这是因为数据库引擎本身(在我的例子中是SQL Server(已经在并行化作业方面做得非常出色。在这种情况下,单个大作业已经最大化了服务器可以处理的进程数量 - 放置更多作业将无济于事。你的情况似乎是这样的。