http-python-thread
2) архитектурно нормально запускать отдельным процессом, нет? Ну в смысле необязательно каждый раз запускать, можно поднять "два" процесса - "один" на обработку запросов, "другой" на обработку чего-то там "тяжелого" и типа межпроцессное взаимодействие (сокеты, к примеру)...
ЗЫ Мне, честно говоря, решение "отдать ответ и задуматься" как-то не нравится архитектурно.
В принципе, с fastcgi ты можешь и треды сделать, конечно. Но, по-моему, процессы+сокеты = лучше масштабируемое решение здесь. А оверхед на "взаимодействие" невелик.
Мне, честно говоря, решение "отдать ответ и задуматься" как-то не нравится архитектурноТут недавно был такой же вопрос
ЗЫ Мне, честно говоря, решение "отдать ответ и задуматься" как-то не нравится архитектурно."отдать ответ и задуматься в текущем процессе/треде". Возможно, я неправильно понял, что именно ищет автор, но mod_python и прочие http server приблуды почти наверняка не предусматривают запуск задачи после в отдельном треде/процессе.
1) mod_python - зло, используй fastcgi (через flup, к примеру).Я слышал ровно обратное мнение, и так же без аргументов, что, мол падает часто.
2) архитектурно нормально запускать отдельным процессом, нет? Ну в смысле необязательно каждый раз запускать, можно поднять "два" процесса - "один" на обработку запросов, "другой" на обработку чего-то там "тяжелого" и типа межпроцессное взаимодействие (сокеты, к примеру)...
Сейчас устроено так: есть CGI (запустить его как FastCGI, SCGI или mod_python --- дело настройки апача).
Есть за апачем сервер на питоне — BaseHTTPServer.
И все запросы CGI перенаправляет туда. Там из сервера уже возвращают ответ (xml-rpc и в сервере запускается тред с обработкой запроса. Форматированием, качанием из инета и т.д. Результаты складываются там же на сервере, и возвращаются на запрос с другими параметрами.
Что будет под нагрузкой --- непонятно. Непонятно насколько питонский сервер хороший.
Но, по-моему, процессы+сокеты = лучше масштабируемое решение здесь.Отваливаются сокеты-то
Отваливаются сокеты-тоот чего отваливаются? крепче приклеивать надо.
Сейчас устроено такизврат какой.
если обработка долгая я бы не гонял каждый запрос в свой сервер, а информацию о текущем состоянии запросов хранил в базе из которой брал бы прямо из cgi, либо какой-нить извратик с memcached сварганил.
если обработка долгая я бы не гонял каждый запрос в свой сервер, а информацию о текущем состоянии запросов хранил в базе из которой брал бы прямо из cgi, либо какой-нить извратик с memcached сварганил.
Спасибо.
Читал про memcached, и про интерфейсы питонские к нему читал. Интересно бы попробовать, только вот судя по статистике получится как из пушки по воробьям
В сервере самое тяжелое — обработка в треде после ответа на запрос.
Насчет изврата: эта штука растет. Там как раз надо заменить слабые места. Вот их и ищу. База изначально и предполагалась.
если уж бд не будет справляться тогда приделать memcached.
есть CGI (запустить его как FastCGI, SCGI или mod_python --- дело настройки апача)прям так уж и дело настройки?
помню, у меня в случае с перлом переход от CGI к mod_perl был просто революцией (производительность, возможности, но и переписать немало кода пришлось)
или на питоне всё так аккуратно пишется что переход к многопоточности проходит незамеченным?
есть CGI handler — как раз CGI запускать, без изменений. В документации сказано что "оно скорее всего будет работать". Сам CGI-то маленький, там переписывать много не придется.
А есть уже publisher. Там по-другому пишется. Но тож переписать не сложно.
про PSP говорить не буду. PHP для Питона со всеми вытекающими.
Устроено так: есть статические странички. Они отдаются Апачем. На страничках AJAX. AJAX-запросы (и iframe'ы, и всё проч) ходят к CGI, точнее, через CGI к питонскому серверу. CGI разбирается какой именно метод дернуть и с какими параметрами.
Я слышал ровно обратное мнение, и так же без аргументов, что, мол падает часто.Здесь и далее имхо. Баги-глюки есть и там и там. Но fcgi архитектурно более "правильное" решение. В плане контроля памяти или секьюрности, к примеру. Или опять же удобства рестарта.
есть CGI (запустить его как FastCGI, SCGI или mod_python --- дело настройки апача)
Ну, не знаю, как у вас, а у меня переход на мод питон в свое время был изрядным геморроем.
Есть за апачем сервер на питоне — BaseHTTPServer.
И все запросы CGI перенаправляет туда. Там из сервера уже возвращают ответ (xml-rpc и в сервере запускается тред с обработкой запроса. Форматированием, качанием из инета и т.д. Результаты складываются там же на сервере, и возвращаются на запрос с другими параметрами.
Что будет под нагрузкой --- непонятно. Непонятно насколько питонский сервер хороший.
Меня в дрожь бросает от слов "нагрузка" и "веб-сервер на питоне" Я не знаю, зачем вам второй веб-сервер. И зачем ждать ответа. Особенно если под нагрузкой. Имхо, как раз тут все было бы замечательно как я описал. Веб-запросы - это одно. "Долгие" процессы - это другое. Можно и правда все через бд синхронизовать или только часть. Если удастся разделить по процессам одного только на чтение - другого только на запись, то можно неплохо в будущем разнести доступ к базе и соответственно ускориться. Репликации и проч.
В документации сказано что "оно скорее всего будет работать".Опять же у меня не заработало. И, кстати, не в этом ли случае кто-то где-то жаловался то ли на утечки памяти, то ли на какую-то хрень с мультитредовостью? Я к тому, что даже разрабы, насколько я помню, не гарантировали корректную работу в этом случае, вроде бы.
Меня в дрожь бросает от слов "нагрузка" и "веб-сервер на питоне"А почему?
(Меня тоже бросает, но как следует объяснить не могу — погуглил и не нашел как делать правильно и от какой нагрузки ломается питонский сервер).
Почитал про Suzanne в Success Stories на python.org — там BaseHttpServer их вполне удовлетворил.
Но вряд ли кто-то сильно этим заморачивается. Стандартный подход - модуль на сях, если что не так. А потому, если нету такого модуля, то стоит подумать и очень хорошо погонять сервер на тестах.
все равно же в основном база будет тормозить, а не генерация страницы...
При схеме веб сервер -> "голый" сокет -> "голый" процесс для "длительных" -> бд <- веб сервер, к примеру, не факт, что тормоза будут только на бд, если веб сервер на питоне. Впрочем, один фиг это гадание на кофейной гуще.
Ну да, согласен. Это как раз те самые "общие соображения", из-за которых и хочется посмотреть по сторонам.
> Когда оптимизируя просто количество строк можно обнаружить интересную разницу в скорости.
Такого не видел, в существенную разницу не верится
> Ну то есть если _все_ написано "правильно", "грамотно" и хорошо знающим питон и тонкости его оптимизации человеком, то он даст нормальный результат по скорости, насколько этого можно требовать от настолько удобного языка.
Мне понравилась статья про оптимизации WideFinder.
Такого не видел, в существенную разницу не веритсяЧто есть "существенная"? В общем, я иногда в сложных местах лишний иф даже ставить не хочу. Как раз после того, как одно время много времени провел за экспериментами с профайлером и собственным кодом. Правда, дело касалось 2.5 и у меня была специфика - много мелких по коду объектов, но очень часто создаваемых и используемых.
Мне понравилась статья про оптимизации WideFinderЧет не помню, ссылку кинешь?
В общем, я иногда в сложных местах лишний иф даже ставить не хочу.Так тут же не в строчке дело.
Согласен. Пример неудачный, так как общий. Хорошо. Лишнюю временную переменную не заведу.
О, спасибо. Полезного для меня не очень много, но есть. А вообще достаточно интересно, конечно. Я, к примеру, как-то до сих пор не предполагал, что "list.append is an atomic operation in CPython".
Оставить комментарий
pilot
Хочется такую штуку: приходит HTTP-клиент, спрашивает запрос, ему отвечают HTTP-ответ и запускают долгоиграющую обработку запроса. Когда обработают, куда-нибудь складывают.Чем (пакет?) правильно такое делать, если хотим еще и приличной скорости и надежности?
Почитал про mod_python --- он вроде не умеет "задумываться" после отправки ответа. Разве что CleanupHandler'ом, но что-то не верится что он работает после отправки ответа.
Встроенный BaseHTTPServer доверия не вызывает (напрасно? хотя в нем и понятно как делать, и Suzanne его хвалит.
Или я чего-то архитектурно неправильное хочу...