python并行化数据库查询执行

时间:2019-04-10 10:55:34

标签: python multithreading multiprocessing

我有以下查询,该查询返回日期范围之间的数据。

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))

要查询我正在传递indexindex + 1处的日期(日期大于索引处的日期)

这些查询花费的时间非常长,我想以并行化的方式执行,因此等待时间更短。我经过joblib,但不确定是multi-threading还是multi-processing。看起来像前者。同样是joblib的新功能,如何使用joblib或其他软件包并行化以上代码?

1 个答案:

答案 0 :(得分:0)

问题很广泛,但是我可以分享对数据库并行查询的经验。

我发现,如果我有很多小工作,我可以使用python内置的多线程模块,例如current.futures。我会加速的。

但是,如果我有大量的工作需要很长时间才能在数据库上运行,那么并行化将无济于事。这是因为数据库引擎本身(在我的示例中是SQL Server)已经完成了出色的并行工作。在这种情况下,一项繁重的工作已经使服务器可以处理的进程数最大化,而增加工作量无济于事。您的情况似乎就是这种情况。