Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 19, 2008 14:12:10

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

mod_python как интерпритатор

пишут, что mod_python включает в себя интерпритатор Python:

Mod_python is an Apache module that embeds the Python interpreter within the server.
может ли mod_python сохранять инициализированные объекты между обращениями клиента?

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



Офлайн

#2 Ноя. 19, 2008 14:20:28

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

mod_python как интерпритатор

will have access to advanced features such as ability to retain database connections and other data between hits
судя по этому - можно… но как?



Офлайн

#3 Ноя. 19, 2008 16:10:11

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

mod_python как интерпритатор

axe
mod_python включает в себя интерпритатор Python:
вы неправильно перевели



Офлайн

#4 Ноя. 19, 2008 18:55:55

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

mod_python как интерпритатор

у меня лично мод-питон требует установленного питона



Офлайн

#5 Ноя. 20, 2008 00:32:55

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

mod_python как интерпритатор

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 встроен только интерпритатор, но не модули, поэтому он, наверно, и требуется.



Офлайн

#6 Ноя. 20, 2008 04:03:15

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

mod_python как интерпритатор

slivlen
Хм. вот страница загрузки mod_python http://httpd.apache.org/modules/python-download.cgi
Берем к примеру бинарную версию для windows. Она весит 162 кб. маловато вроде =)
Да и в исходниках ничего такого не наблюдается, похожего на питон.



Отредактировано (Ноя. 20, 2008 04:06:48)

Офлайн

#7 Ноя. 20, 2008 12:49:30

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

mod_python как интерпритатор

slivlen, спасибо!

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



Отредактировано (Ноя. 20, 2008 12:50:59)

Офлайн

#8 Ноя. 20, 2008 14:00:52

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

mod_python как интерпритатор

можно ли как-то задать количество интерпретаторов, соответствующих каждому процессу (скрипту)?

есть ли у разных интерпретаторов (одного скрипта) общий кусок памяти?



Офлайн

#9 Ноя. 20, 2008 18:40:42

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

mod_python как интерпритатор

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



Офлайн

#10 Ноя. 20, 2008 23:26:41

AlexKiriukha
От:
Зарегистрирован: 2008-02-03
Сообщения: 81
Репутация: +  0  -
Профиль   Отправить e-mail  

mod_python как интерпритатор

Когда была задача “держать” некоторые объекты между запросами, то очень помог mod_wsgi-2. Можно запустить один процесс и всё будет выполняться в нём. Поэтому если не обязательно использовать mod_python, то можно попробовать и mod_wsgi.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version