【问题标题】:python parallelize db query executionpython并行化数据库查询执行
【发布时间】:2019-08-31 19:27:16
【问题描述】:

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

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 或其他包并行化上述代码?

【问题讨论】:

标签: python multithreading multiprocessing


【解决方案1】:

这个问题相当广泛,但我可以分享我自己对数据库进行并行查询的经验。

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

但是,如果我有需要很长时间才能在数据库上运行的大型作业,那么并行化就无济于事了。这是因为数据库引擎本身(在我的例子中是 SQL Server)已经在并行化工作方面做了出色的工作。在这种情况下,单一的大作业已经在最大化服务器可以处理的进程数量 - 放置更多作业将无济于事。你的情况好像是这个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2011-04-13
    • 1970-01-01
    • 2019-12-03
    相关资源
    最近更新 更多