使用'多处理'用于PostgreSQL查询的Python 3中的库

时间:2018-06-12 15:04:48

标签: python postgresql concurrency sqlalchemy multiprocessing

我试图编写一个Python脚本来将数据库中的查询数据读入pandas数据帧。

我已经大大简化了代码,以测试使用多处理库以便并行运行查询的有效性,因为运行包含我想要收集的所有信息的查询需要几分钟。

但是,从多处理中使用池并不是最有效的。 (实际上,运行脚本时性能没有差异)。有没有更有效的方法在PostgreSQL中同时运行查询?

任何建议都很棒!

import psycopg2
import pandas as pd
import sqlalchemy as sa
from multiprocessing import Pool

engine = sa.create_engine("<database info>")

def run_query(query):
    print(query)
    data_frame = pd.read_sql_query(query, engine)

if __name__ == '__main__':
    pool = Pool(processes=len(queries))
    pool.map(run_query, queries)

1 个答案:

答案 0 :(得分:0)

我不知道它是否有效但你可以使用工人和生产者计划。基本上你定义了一个多处理Q,并且生产者进程在Q中添加了一些东西.Indice会监听Q并且一旦将一些信息放入Q就开始工作。

这是一个很好的例子。

http://danielhnyk.cz/python-producers-queue-consumed-by-workers/

您在Multiprocessing中遇到的问题是您必须注意共享数据,并且还必须考虑调度进程的时间,这使得Python中的Multiprocessing不能用于小任务。但是,如果您经常执行该任务,或者您创建了一次该过程,只需在有任务时运行该任务即可获得好处。