Уведомления

Группа в Telegram: @pythonsu

#1 Май 22, 2008 03:25:48

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Пул в алхимии.

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

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 будет закрыто соединение?



Офлайн

#2 Май 22, 2008 14:15:55

vigorouz
От:
Зарегистрирован: 2008-05-19
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Пул в алхимии.

Насчёт пула не знаю, но для потоков, есть scoped_session. http://www.sqlalchemy.org/docs/04/session.html#unitofwork_contextual. Это правда совсем не пул. Но чтоб для одного потока не создавалось несколько коннектов работает. Соединение не создаётся если оно уже создано для этого потока. Не знаю подойдёт ли это для Вашей задачи.



Офлайн

#3 Май 22, 2008 14:24:33

vigorouz
От:
Зарегистрирован: 2008-05-19
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Пул в алхимии.

Сейчас посмотрел, документацию, так там же есть пул :-) если create_engine указать указать соответствующие параметры http://www.sqlalchemy.org/docs/04/dbengine.html#dbengine_options …или я не понял вопрос.



Офлайн

#4 Май 23, 2008 02:55:59

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Пул в алхимии.

Ага… Нашёл. Спасибо. Я, сначала, не врубился как подключить пул. Создать, это всегда пожалуйста, а использовать… А на самом деле всё просто.
Просто документация по алхимии какая-то сумбурная… не то, что по Qt… :-)
Вопрос закрыт.

P.S. Я переключаюсь на другой проект, так что пока перестаю мучить алхилию и вас…



Офлайн

#5 Май 24, 2008 13:11:22

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Пул в алхимии.

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

..bw



Отредактировано (Май 24, 2008 13:11:56)

Офлайн

#6 Май 25, 2008 00:27:48

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Пул в алхимии.

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



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version