делаю web-приложение, использующее БД MySQL

пробую установить постоянное соединение с mysql по статье:
http://www.modpython.org/FAQ/faqw.py?req=show&file=faq03.003.htp

соединение создаётся, отображается в менеджере сессий БД. если обновить страницу в течение нескольких секунд (15-20), то время сессии обновляется. после этого времени - создаётся новая сессия БД. и так продолжается до 10-и соединений.

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

Last edited Aug. 4, 2008, 11:10 a.m.

Я не знаком с mod_python. Поэтому этот пример мне кажется дебильным (да и старый он очень). Почему не используется традиционный для SQLAlchemy create_engine? В этом случае можно было бы вылечиться strategy = 'threadlocal' и/или pool_size = 1, max_overflow = 0.

..bw
нужно создавать постоянное соединение с БД.
create_engine это умеет?
create_engine, вообще то это по докуменации единственный нормальный способ инициализации SQLA. Если этот mod_python работат как CGI (FCGI) и в силах сервера прибить соответствующий процесс, то о сохранении какого соединения может идти речь. К тому же, по умолчанию, MySQL не держит соединение больше часа, если оно не активно. Тут 1000 условий.
Объясни, зачем тебе именно одно соединение и именно непременно никогда не разрываемое?

p.s. Давно бы по документации к SQLA сам разобрался, что тебе надо и что SQLA может.

p.p.s. Еще раз скажу. Вариантов кроме create_engine я не знаю (их не существует), любые другие способы завести SQLA - хаки.

..bw
SQLAlchemy == SQLA? читаю: не понял;

мои догадки о сохранении соединения:
поддержка открытого соединения - это внутренние дела mysql сервера. при обращении к серверу, должен отправляться идентификатор уже открытого соединения и оно сразу начинает использоваться. вместо того, чтобы создавать новое соединение.
(аналог в php mysql_pconnect)

постоянное соединение нужно для убыстрения работы. каждый раз не надо устанавливать коннект.

если я правильно понимаю эту часть, то не понятно, в чём смысл создания 10-и соединений.

работает ли mod_python как cgi? не знаю, как на самом деле web-сервер устроен.
предполагаю, что cgi - это интерфейс для работы через командную строку. и через него можно обращаться и к python, и к perl и к чему угодно.

наверное, принцип mod_python, как у cgi. при обращении по url - скрипт выполняется и возвращает результат.
в чём разница, жив ли процесс, если доступ к соединению осуществляется по идентификатору?
mod_python работает не как cgi. стартует, работает и выключается вместе с Apache
> SQLAlchemy == SQLA? читаю: не понял;
Да.

> в чём разница, жив ли процесс, если доступ к соединению осуществляется по идентификатору?
Это что-то новое. Покажи, где об этом в DBAPI написано?

> если я правильно понимаю эту часть, то не понятно, в чём смысл создания 10-и соединений.
Ну поработаешь с СУБД, узнашь. Иногда требуется несколько параллельных (не обязательно в потоках) "сессий" (транзакций). Я выше про пул говорил, и про документацию к sqla, почитай, будет время.

p.s. Боюсь, что больше ничем помочь не могу. Нет желания разбираться с mod_python и решать псевдо-проблему.

..bw
>> если доступ к соединению осуществляется по идентификатору?
> Покажи, где об этом в DBAPI написано?
так там этого нет, потому что создание постоянных соединений не является стандартной функциональностью.
постоянные соединения реализуются через SQLAlchemy.
но в документациях, о том что где-то создаются идентификаторы - не видел. это только догадка.

вероятно, что доступ так и осуществляется по набору хост/логин/пароль/база, просто не тратятся ресурсы на установку соединения, т.к. уже открытое соединение есть и его сразу можно использовать.

про параллельные запросы - я уже догадался. согласен, есть смысл держать несколько соединений.

хотя, стоит разобраться с логикой, - когда открываются, когда закрываются и сколько их может быть.
не знаю, это настройки БД или mod_python

> p.s. Боюсь, что больше ничем помочь не могу.
и на этом спасибо! я хотя бы немного узнал о работе сервера :)