Форум сайта python.su
пишут, что mod_python включает в себя интерпритатор Python:
Mod_python is an Apache module that embeds the Python interpreter within the server.может ли mod_python сохранять инициализированные объекты между обращениями клиента?
Офлайн
will have access to advanced features such as ability to retain database connections and other data between hitsсудя по этому - можно… но как?
Офлайн
axeвы неправильно перевели
mod_python включает в себя интерпритатор Python:
Офлайн
у меня лично мод-питон требует установленного питона
Офлайн
axeВсе верно. В mod_python встроен питоновский интерпритатор(аналогично как интрепритатор пыха в libphp). Это позволяет запускать его в рамках процесса аппача и снизить накладные расходы связанные с порождением нового процесса. mod_python как правило создает множество объектов интерпритатора(если быть точным то создаются subinterpreters ) во время работы.
пишут, что mod_python включает в себя интерпритатор Python
axeМожно. Сделай подключение к базе глобальным объектом и обращайся к нему с помощью н-р такой ф-ции:
например, по первому обращению в браузере - создавать подключение к базе данных.
def get_connection():
global _conn
try:
_conn.ping()
return _conn
except Exception:
_conn = MySQLdb.connect(host='h', user='u', passwd='p', db='db')
_conn.set_character_set('utf8')
return _conn
shizaВ mod_python встроен только интерпритатор, но не модули, поэтому он, наверно, и требуется.
у меня лично мод-питон требует установленного питона
Офлайн
slivlen
Хм. вот страница загрузки mod_python http://httpd.apache.org/modules/python-download.cgi
Берем к примеру бинарную версию для windows. Она весит 162 кб. маловато вроде =)
Да и в исходниках ничего такого не наблюдается, похожего на питон.
Отредактировано (Ноя. 20, 2008 04:06:48)
Офлайн
slivlen, спасибо!
Провёл некоторые эксперименты. И вот что у меня получается:
- для каждого процесса, запускаемого под mod_python, при обновлении страницы браузера последовательно создаётся 7 интерпретаторов.
- переменные, сохранённые в интерпретаторе могут быть повторно использованы, когда процесс запускается внутри этого интерпретатора
- если одновременных обращений к скрипту получается больше 7, то интерпретаторов создаётся больше, потом их количество уменьшается до 10 (наверное, там какая-то логика должна следить за количеством потоков)
- в каждом интерпретаторе сохраняется свой набор глобальных переменных
- IE при каждой перезагрузке меняет интерпретатор
- FF меняет интерпретатор, если с последнего обновления страницы прошло более 20 секунд
- питоновские объекты исчезают при изменении запускаемого скрипта и при перезагрузке apache
Отредактировано (Ноя. 20, 2008 12:50:59)
Офлайн
можно ли как-то задать количество интерпретаторов, соответствующих каждому процессу (скрипту)?
есть ли у разных интерпретаторов (одного скрипта) общий кусок памяти?
Офлайн
shizaПочему маловато? У меня в винде, например, интерпретатор питоновский весит 24Кб(Хотя это зависит от сборки. Можно все библиотеки сишные слинковать с интерпретатором статически и тогда его размер увеличится).
Берем к примеру бинарную версию для windows. Она весит 162 кб. маловато вроде smile
shizaКак-то плохо ты искал =) Там полно Python C API вызовов. Посмотри для примера mod_python.c и в особенности ф-цию make_interpreter.
Да и в исходниках ничего такого не наблюдается, похожего на питон.
axeСогласно докам на каждый виртуальный сервер создается свой экземпляр интерпретатора, который и обрабатывает все запросы к скриптам конкретного виртуального сервера.
можно ли как-то задать количество интерпретаторов, соответствующих каждому процессу (скрипту)?
axeНет, они изолированы друг от друга.
есть ли у разных интерпретаторов (одного скрипта) общий кусок памяти?
axeЕще сюда стоит добавить что mod_python кэширует импортируемые модули и после внесения в них изменений требуется перезагрузка апача.
- питоновские объекты исчезают при изменении запускаемого скрипта и при перезагрузке apache
Офлайн
Когда была задача “держать” некоторые объекты между запросами, то очень помог mod_wsgi-2. Можно запустить один процесс и всё будет выполняться в нём. Поэтому если не обязательно использовать mod_python, то можно попробовать и mod_wsgi.
Офлайн