Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 14, 2014 14:45:12

refresh
От:
Зарегистрирован: 2010-11-27
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Несколько вопросов по psycopg2

Добрый день!
Пишу софт, который состоит из 3 модулей:
Первый принимает http запрос и через очередь передает их второму.
Второй выполняет действия указанные в http пакете, каждое действие выполняется в отдельном треде.
Оба модуля активно пишут в бд, для этого используют третий модуль, который работает с базой через psycopg2(в этом модуле есть функция SQLQuery, которая берет коннект из пула, выполняет переданный запрос и кладет коннект в пул).

Вопрос первый:
при “инициализации” третьего модуля создается psycopg2 Pool на конкретное кол-во коннектов. На каждый входящий http запрос надо делать несколько запросов в БД, как быть есть число запросов в секунду возрастет и станет больше чем коннектов в пуле? Я предполагаю использовать такой алгоритм - берется коннектор из пула, если пул пуст то отрывается обычный коннектор.

Вопрос второй:
как правильно использовать пулы в такой архитектуре как у меня? я использую SimpleConnectionPool, но у меня частенько падают эксепшены. Например, иногда, когда я пытаюсь вернуть коннект в пул, тред падает с эксепшеном что коннект который я пытаюсь положить обратно не используется( используемые коннекты хранятся в дикте). Складывается такое ощущение, что я как-то неправильно использую.

Вопрос третий:
Думал над использование многопоточным модулем для работы с SQL, использую psycopg2. Правильно ли я понимаю, многопоточность можно использовать только для INSERT, DELETE, UPDATE, ALTER и т.д. ну т.е. если мне надо получать данные из бд, то многопоточность использовать не получится?

Заранее благодарю.



Офлайн

#2 Март 10, 2014 12:36:39

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Несколько вопросов по psycopg2

Можно попробовать использовать sqlalchemy - там есть встроенный pool

> Я предполагаю использовать такой алгоритм - берется коннектор из пула, если пул пуст то отрывается обычный
Тогда новый коннект надо класть в пул, вдруг пригодится. И потом постепенно убавлять неиспользуемые коннекты до заданного вами уровня.

> если мне надо получать данные из бд, то многопоточность использовать не получится?
Почему не получится? Что такое многопоточность,. запросы к БД из разных thread-объектов?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version