Извлечение больших таблиц из Postgres в CSV с помощью многопроцессорной обработки Python ускоряет - PullRequest
0 голосов
/ 28 декабря 2018

Мне нужно выбрать все строки из нескольких таблиц и сохранить их в отдельных файлах 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 голосов
/ 28 декабря 2018

Как указано выше, ваше ограничение, вероятно, заключается в том, насколько быстро отдельные ресурсы выделяются для процесса загрузки.Я предлагаю иметь четыре отдельных скрипта для запуска из командной строки для загрузки одного файла.Это позволит им работать независимо и самостоятельно открывать соединение с сервером.

...