使用Python多处理功能将大型表格从Postgres提取为CSV可以加快速度

时间:2018-12-27 22:07:47

标签: python postgresql multiprocessing psycopg2 python-multiprocessing

我需要从多个表中选择所有行,并将它们保存在单独的CSV中。

我已经在使用 multiprocessing.Pool 为每个表进行单独的处理。 但是表很大(每个表有2000000行),提取所有表都需要时间。

 import psycopg2
 from multiprocessing import Pool

 def pg_to_csv(table_name):

     conn = psycopg2.connect(PG_DEV_CONFIG)
     cur = conn.cursor()

     query = f"""
         SELECT * FROM public.{table_name}
     """

     output_query = "COPY ({0}) TO STDOUT WITH CSV HEADER".format(query)
     with open(table_name+'.csv', 'w') as output_csv:
         cur.copy_expert(output_query, output_csv)
         output_csv.close()

     conn.close()
     return

if __name__ == '__main__':
    args = ['table1', 'table2','table3','table4']
    p = Pool(4)
    p.map(pg_to_csv, args)

在这种情况下的最佳做法是什么?如何加快流程?

1 个答案:

答案 0 :(得分:0)

如上所述,您的限制可能是单个资源分配到下载过程的速度有多快。我的建议是从命令行运行四个单独的脚本,以下载单个文件。这将允许它们独立运行并独立打开自己的服务器连接。