我需要从多个表中选择所有行,并将它们保存在单独的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)
在这种情况下的最佳做法是什么?如何加快流程?
答案 0 :(得分:0)
如上所述,您的限制可能是单个资源分配到下载过程的速度有多快。我的建议是从命令行运行四个单独的脚本,以下载单个文件。这将允许它们独立运行并独立打开自己的服务器连接。