Форум сайта python.su
Добрый день!
Пишу софт, который состоит из 3 модулей:
Первый принимает http запрос и через очередь передает их второму.
Второй выполняет действия указанные в http пакете, каждое действие выполняется в отдельном треде.
Оба модуля активно пишут в бд, для этого используют третий модуль, который работает с базой через psycopg2(в этом модуле есть функция SQLQuery, которая берет коннект из пула, выполняет переданный запрос и кладет коннект в пул).
Вопрос первый:
при “инициализации” третьего модуля создается psycopg2 Pool на конкретное кол-во коннектов. На каждый входящий http запрос надо делать несколько запросов в БД, как быть есть число запросов в секунду возрастет и станет больше чем коннектов в пуле? Я предполагаю использовать такой алгоритм - берется коннектор из пула, если пул пуст то отрывается обычный коннектор.
Вопрос второй:
как правильно использовать пулы в такой архитектуре как у меня? я использую SimpleConnectionPool, но у меня частенько падают эксепшены. Например, иногда, когда я пытаюсь вернуть коннект в пул, тред падает с эксепшеном что коннект который я пытаюсь положить обратно не используется( используемые коннекты хранятся в дикте). Складывается такое ощущение, что я как-то неправильно использую.
Вопрос третий:
Думал над использование многопоточным модулем для работы с SQL, использую psycopg2. Правильно ли я понимаю, многопоточность можно использовать только для INSERT, DELETE, UPDATE, ALTER и т.д. ну т.е. если мне надо получать данные из бд, то многопоточность использовать не получится?
Заранее благодарю.
Офлайн
Можно попробовать использовать sqlalchemy - там есть встроенный pool
> Я предполагаю использовать такой алгоритм - берется коннектор из пула, если пул пуст то отрывается обычный
Тогда новый коннект надо класть в пул, вдруг пригодится. И потом постепенно убавлять неиспользуемые коннекты до заданного вами уровня.
> если мне надо получать данные из бд, то многопоточность использовать не получится?
Почему не получится? Что такое многопоточность,. запросы к БД из разных thread-объектов?
Офлайн