我试图编写一个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)
答案 0 :(得分:0)
我不知道它是否有效但你可以使用工人和生产者计划。基本上你定义了一个多处理Q,并且生产者进程在Q中添加了一些东西.Indice会监听Q并且一旦将一些信息放入Q就开始工作。
这是一个很好的例子。
http://danielhnyk.cz/python-producers-queue-consumed-by-workers/
您在Multiprocessing中遇到的问题是您必须注意共享数据,并且还必须考虑调度进程的时间,这使得Python中的Multiprocessing不能用于小任务。但是,如果您经常执行该任务,或者您创建了一次该过程,只需在有任务时运行该任务即可获得好处。