Как я могу объединить соединения с помощью psycopg и gevent? - программирование
Подтвердить что ты не робот

Как я могу объединить соединения с помощью psycopg и gevent?

В документах psycopg указано: "Соединения Psycopg не являются безопасными для зеленого потока и не могут использоваться одновременно разными зелеными потоками. Попытка выполнить более одной команды во времени с использованием одного курсора на поток приведет к ошибке (или тупиковой ситуации в версии до 2.4.2). Поэтому программистам рекомендуется избегать совместного использования соединений между сопрограммами или использовать библиотечную блокировку для синхронизации общих подключений, например. для объединения ".

Я не могу найти реализацию пула, который является безопасным для зеленого потока - есть ли там там?

4b9b3361

Ответ 1

Я предполагаю, что вы знаете gevent-psycopg2 модуль, который делает psycopg приветствующим зелёным.

Ищете решение для объединения пулов Я пробовал 2 решения:

  • SQLALchemy - кажется, что он работает правильно с потоками, обработанными обезьяной, и gevent-psycopg2. Класс QueuePool использует threading модуль внутри для блокировки, поэтому требуется патч обезьяны, хотя gevent-psycopg2 делает psycopg2 зеленым.

  • a psycopg2 пример объединения пула в примерах gevent

Я пробовал оба решения, но не при загрузке, поэтому я пока не могу сказать об их надежности.

Ответ 3

Здесь хороший пул (не только пример, но используемый в производстве): psycopg2_pool.py