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

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

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

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

Заранее благодарю.
lorien
Можно попробовать использовать sqlalchemy - там есть встроенный pool

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

> если мне надо получать данные из бд, то многопоточность использовать не получится?
Почему не получится? Что такое многопоточность,. запросы к БД из разных thread-объектов?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB