Использование многопроцессорной библиотеки в Python 3 для запросов PostgreSQL - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь написать скрипт 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)

1 Ответ

0 голосов
/ 12 июня 2018

Я не знаю, насколько это эффективно, но вы можете использовать схему рабочих и производителей.По сути, вы определяете многопроцессорный Q, а процесс-производитель добавляет что-то в Q. Рабочий слушает Q и начинает работать, как только некоторая информация помещается в Q.

Вот хороший пример.

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

Проблема, с которой вы столкнулись при работе с мультипроцессорами, заключается в том, что вы должны позаботиться об общих данных, а также необходимо учитывать время для планирования процессов, что делает мультипроцессор в Python не очень удобным для использования.для небольших задач.Однако, если вы выполняете эти задачи очень часто или создаете процесс один раз и просто запускаете задачи, когда они есть, вы получаете преимущество.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...