Найти - Пользователи
Полная версия: mod_python как интерпритатор
Начало » Web » mod_python как интерпритатор
1 2
axe
пишут, что mod_python включает в себя интерпритатор Python:
Mod_python is an Apache module that embeds the Python interpreter within the server.
может ли mod_python сохранять инициализированные объекты между обращениями клиента?

например, по первому обращению в браузере - создавать подключение к базе данных.
а при втором обращении - использовать уже существующий объект соединения.
axe
will have access to advanced features such as ability to retain database connections and other data between hits
судя по этому - можно… но как?
Александр Кошелев
axe
mod_python включает в себя интерпритатор Python:
вы неправильно перевели
shiza
у меня лично мод-питон требует установленного питона
slivlen
axe
пишут, что mod_python включает в себя интерпритатор Python
Все верно. В mod_python встроен питоновский интерпритатор(аналогично как интрепритатор пыха в libphp). Это позволяет запускать его в рамках процесса аппача и снизить накладные расходы связанные с порождением нового процесса. mod_python как правило создает множество объектов интерпритатора(если быть точным то создаются subinterpreters ) во время работы.
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
Вызов ping() здесь нужен для проверки того, живо-ли еще подключение. Если его долго не использовали, то mysql рвет соединение.
shiza
у меня лично мод-питон требует установленного питона
В mod_python встроен только интерпритатор, но не модули, поэтому он, наверно, и требуется.
shiza
slivlen
Хм. вот страница загрузки mod_python http://httpd.apache.org/modules/python-download.cgi
Берем к примеру бинарную версию для windows. Она весит 162 кб. маловато вроде =)
Да и в исходниках ничего такого не наблюдается, похожего на питон.
axe
slivlen, спасибо!

Провёл некоторые эксперименты. И вот что у меня получается:
- для каждого процесса, запускаемого под mod_python, при обновлении страницы браузера последовательно создаётся 7 интерпретаторов.
- переменные, сохранённые в интерпретаторе могут быть повторно использованы, когда процесс запускается внутри этого интерпретатора
- если одновременных обращений к скрипту получается больше 7, то интерпретаторов создаётся больше, потом их количество уменьшается до 10 (наверное, там какая-то логика должна следить за количеством потоков)
- в каждом интерпретаторе сохраняется свой набор глобальных переменных
- IE при каждой перезагрузке меняет интерпретатор
- FF меняет интерпретатор, если с последнего обновления страницы прошло более 20 секунд
- питоновские объекты исчезают при изменении запускаемого скрипта и при перезагрузке apache
axe
можно ли как-то задать количество интерпретаторов, соответствующих каждому процессу (скрипту)?

есть ли у разных интерпретаторов (одного скрипта) общий кусок памяти?
slivlen
shiza
Берем к примеру бинарную версию для windows. Она весит 162 кб. маловато вроде smile
Почему маловато? У меня в винде, например, интерпретатор питоновский весит 24Кб(Хотя это зависит от сборки. Можно все библиотеки сишные слинковать с интерпретатором статически и тогда его размер увеличится).
shiza
Да и в исходниках ничего такого не наблюдается, похожего на питон.
Как-то плохо ты искал =) Там полно Python C API вызовов. Посмотри для примера mod_python.c и в особенности ф-цию make_interpreter.
axe
можно ли как-то задать количество интерпретаторов, соответствующих каждому процессу (скрипту)?
Согласно докам на каждый виртуальный сервер создается свой экземпляр интерпретатора, который и обрабатывает все запросы к скриптам конкретного виртуального сервера.
axe
есть ли у разных интерпретаторов (одного скрипта) общий кусок памяти?
Нет, они изолированы друг от друга.
axe
- питоновские объекты исчезают при изменении запускаемого скрипта и при перезагрузке apache
Еще сюда стоит добавить что mod_python кэширует импортируемые модули и после внесения в них изменений требуется перезагрузка апача.
AlexKiriukha
Когда была задача “держать” некоторые объекты между запросами, то очень помог mod_wsgi-2. Можно запустить один процесс и всё будет выполняться в нём. Поэтому если не обязательно использовать mod_python, то можно попробовать и mod_wsgi.
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