Форум сайта python.su
Конечная цель – бональная многопользовательская БД на MySQL с Web-интерфейсом (FreeBSD/Apache/mod_python). У каждого пользователя – отдельное подключение, персональный лог и свои права на доступ к таблицам. Вот что я сделал:
import sqlalchemy.engine as engine
import os
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(autoflush = True, transactional = True)
mysql_db = engine.create_engine('mysql://localhost/information_schema')
conn = mysql_db.connect()
sess = Session(bind = conn)
def handler(req):
global sess
conn = sess.connection()
req.content_type = 'text/plain'
req.write('pid = %d\n' % os.getpid())
req.write('thread_id = %d\n' % conn.connection.thread_id())
req.write('-----------------\n')
return 0
pid = 2879
thread_id = 60
-----------------
pid = 2881
thread_id = 62
-----------------
pid = 2879
thread_id = 60
-----------------
...
Офлайн
Собственно вопрос вот в чем:
Может ли пул соединений (connection pool) совместно использоваться несколькими процессами (не потоками!)?
Это важно, потому что реально Apache выбирает любой свободный процесс для обработки запроса (request) в рамках одной и той же сессии (см. например, The Process/Interpreter Model). А если первый запрос пользователя, в котором он подключился к БД под именем “Иванов” обслуживался процессом 451, а второй процессом 470, в котором это подключение недоступно, то такая телега никуда не поедет. Как же все это работает?
Офлайн
Я к вебу отношение имею смутное но мои знания говорят следующее…
Исторически сложилось так, что среднестатистический веб-сервер для каждого запроса создаёт новый процесс. Есть штучки вроде fastcgi, для которых это немного нарушается, но тебе явно не поможет…
Даже если тебя съели, у тебя есть два выхода. Так вот, ты можешь использовать что-нить для межпроцессного взаимодействия, например, dbus. Но это, имхо, будет Ужос летящий на крыльях ночи. Очень не быстро летящий. Второй вариант – какой-нить объектный фреймвок, например django или zope. Если нужно что-нить более низкоуровневое, то посмотри на wsgi, на котором все эти фреймвоки и основаны.
Офлайн