Как мне разработать эффективную настройку для параллельных приложений Python3 Postgresql11 для многопроцессорных пулов соединений Psycop2g? - PullRequest
0 голосов
/ 10 ноября 2019

В настоящее время я собираю данные о свечах для примерно 1000 пар криптовалют для разных временных периодов (1, 5, 15, 30 и 60 минут), вставляя их через соответствующие интервалы в таблицу Postgresql 11 с Python 3 - Psycopg2. Это работает очень хорошо и вовремя. Затем я начинаю обработку расчета для примерно 40 значений индикатора из выборки из последних 200 записей для каждой торговой пары. Я до сих пор не нашел готовую настройку для этого приложения.

Я испробовал несколько подходов: 1. Многопоточность Python с Psycopg2 ThreadedConnectionPool - это работает, но не дает результатов во времени - занимает около 45+ секунд. 2. Многопроцессорная обработка Python для истинно параллельной работы. Я не нашел способа использовать пул соединений с Postgresql (я нашел эту запись без ответа: Совместное использование пула соединений postgres между python multiprocess ). Поэтому я открываю и закрываю соединение в каждом процессе, который сразу же исчерпывает все соединения, предлагаемые сервером Postgresql (даже если установлен максимум 1000). 3. Я попытался использовать функции на стороне сервера, запускаемые при вставке. Это работает, но мне не удалось настроить производительность сервера, хотя я масштабировал до 8 процессоров и 32 ГБ памяти. Процесс занимает несколько минут.

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

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