Найти - Пользователи
Полная версия: Пул в алхимии.
Начало » Базы данных » Пул в алхимии.
1
ZZZ
Ладно, всё, впринципе, решаемо, но вот собрался я разобраться с пулом соединений… В документации информации маловато (или я не нашёл?). Вот здесь я насторожился…
Как сделать так, чтобы при создании сессии соединение для неё бралось из пула. При этом сессии будут создаваться в большом количестве и в разных нитях одновременно. А то делать так:

Session = sessionmaker(bind = create_engine(“postgres://root:root@localhost:5432/V”),
autoflush = False, transactional = True)()
## Решение второго вопроса предидущей темы, потом оформлю и добавлю в алхимию.
SessionId = Session.connection().execute(“SELECT open_session(%s, %s, %s)”, (“root”, “root”, “127.0.0.1”)).fetchone() ## Здесь создаётся сессия _пользователя_, так что не пугайтесь… :-)
Session.commit()

Как-то не красиво (ну можно, конечно оформить) и медленно (а если у меня будет несколько десятков запросов в секунду?).
Изобретать пылесос и самому писать пул, меня как-то не прельщает.

Ещё вопрос: в моём варианте, после уничтожения Session будет закрыто соединение?
vigorouz
Насчёт пула не знаю, но для потоков, есть scoped_session. http://www.sqlalchemy.org/docs/04/session.html#unitofwork_contextual. Это правда совсем не пул. Но чтоб для одного потока не создавалось несколько коннектов работает. Соединение не создаётся если оно уже создано для этого потока. Не знаю подойдёт ли это для Вашей задачи.
vigorouz
Сейчас посмотрел, документацию, так там же есть пул :-) если create_engine указать указать соответствующие параметры http://www.sqlalchemy.org/docs/04/dbengine.html#dbengine_options …или я не понял вопрос.
ZZZ
Ага… Нашёл. Спасибо. Я, сначала, не врубился как подключить пул. Создать, это всегда пожалуйста, а использовать… А на самом деле всё просто.
Просто документация по алхимии какая-то сумбурная… не то, что по Qt… :-)
Вопрос закрыт.

P.S. Я переключаюсь на другой проект, так что пока перестаю мучить алхилию и вас…
bw
Поправьте, если ошибаюсь.
create_engine(…, strategy='threadlocal', …) - позволяет избежать повторного создания соединения в пределах одного потока.

..bw
ZZZ
bw
Поправьте, если ошибаюсь.
create_engine(…, strategy='threadlocal', …) - позволяет избежать повторного создания соединения в пределах одного потока.
Всё верно. Но не пойдёт. У меня в одной нити позможно несколько различных сессий и каждая со своей транзакцией. Хотя это зло, с которым нужно боротся.
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