在Python 3中使用'multiprocessing'库进行PostgreSQL查询



我正在尝试编写一个 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)

我不知道它是否有效,但您可以使用工人和生产者方案。基本上,你定义一个多处理 Q,生产者进程在 Q 中添加一些东西。工作线程听 Q 并在将一些信息放入 Q 后立即开始工作。

这是一个很好的例子。

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

您在多处理中遇到的问题是您必须注意共享数据,并且必须考虑安排进程的时间,这使得 Python 中的多处理不太适用于小任务。但是,如果您经常执行该任务,或者您创建一次流程,然后在有任务时运行任务,您将获得好处。

最新更新