Как стать автором
Обновить

Уникальный WSGI веб сервер c использованием ESP8266. Часть 1

Время на прочтение4 мин
Количество просмотров9.5K

Всем привет!

Данная статья является первой частью моего туториала по разработке достаточно необычного WSGI сервера. В данной статье я поясню теоретическую часть своей задумки.

Основная аудитория — начинающие разработчики, знакомые с Python но желающие познать дзен работы http протокола.

Готовы? Пошли под кат.
Читать дальше →
Всего голосов 8: ↑5 и ↓3+2
Комментарии7

Web-разработка на Python глазами PHP-программиста

Время на прочтение7 мин
Количество просмотров176K

Введение



В статье хотелось бы поднять вопросы отличия использования Python для web-разработки по сравнению с оной на PHP. Надеюсь, статья не приведет к холиварам, так как она вовсе не о том, какой язык лучше или хуже, а исключительно о технических особенностях Python.
Читать дальше →
Всего голосов 77: ↑62 и ↓15+47
Комментарии95

SOAP и REST сервисы с помощью Python-библиотеки Spyne

Время на прочтение4 мин
Количество просмотров44K

Знакомство с библиотекой Spyne


В данной статье я хочу рассказать о замечательной Python-библиотеке Spyne. Мое знакомство с Spyne началось в тот момент, когда передо мной поставили задачу написать Веб-сервис, который будет принимать и отдавать запросы через SOAP-протокол. Немного погуглив я наткнулся на Spyne, которая является форком библиотеки soaplib. А еще я был удивлен, насколько мало русскоязычной информации встречается о данной библиотеке.

С помощью Spyne можно писать веб-сервисы, которые умеют работать с SOAP, JSON, YAML, а написанный скрипт можно запустить через mod_wsgi Apache. Итак, давайте рассмотрим несколько примеров, напишем работающие скрипты и настроим так, чтобы скрипты работали через apache.
Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии6

Оптимизация стадии инициализации Django

Время на прочтение4 мин
Количество просмотров11K

Если у вас Django проект работает на синхронных воркерах и вы периодически их перезапускаете (например, в gunicorn это опция --max-requests), полезно было бы знать, что по-умолчанию после каждого перезапуска воркера, первый запрос к нему обрабатывается гораздо дольше, чем последующие.


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

Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии8

uWSGI в помощь метрикам. Доклад Яндекса

Время на прочтение8 мин
Количество просмотров4.5K
На днях состоялся Moscow Python Meetup #66 — сообщество продолжает обсуждать актуальные инструменты, которые усиливают язык и адаптируют его к разным окружениям. В том числе на митапе прозвучал и мой доклад. Меня зовут Наиль, я делаю Яндекс.Коннект.



Рассказ, который я подготовил, был посвящён uWSGI. Это многофункциональный сервер веб-приложений, а каждое современное приложение сопровождается метриками. Я постарался показать, как возможности uWSGI способны помочь в сборе метрик.

Читать дальше →
Всего голосов 21: ↑17 и ↓4+13
Комментарии2

Примеры использования asyncio: HTTPServer?!

Время на прочтение8 мин
Количество просмотров50K
Не так давно зарелизилась новая версия Python 3.4 в changelog которой вошло много «вкусностей». Одна из таких — модуль asyncio, содержащий инфраструктуру пригодную для написания асинхронных сетевых приложений. Благодаря концепции сопрограмм (coroutines), код асинхронного приложения прост для понимания и поддержки.

В статье на примере простого TCP (Echo) сервера я постараюсь показать с чем едят asyncio, и рискну устранить «фатальный недостаток» этого модуля, а именно отсутствие реализации асинхронного HTTP сервера.
Читать дальше →
Всего голосов 33: ↑31 и ↓2+29
Комментарии9

WSGI/Rack для PHP

Время на прочтение2 мин
Количество просмотров13K
Исторически сложилось, что скрипты на PHP запускаются при каждом HTTP-запросе. Запускаясь, скрипт проводит какую-то инициализацию (например, устанавливает соединение с СУБД), после чего анализирует запрос и формирует ответ. Однако, всем прекрасно известно, что в мире Python и Ruby принят другой подход: веб-приложения на этих языках загружаются в память единовременно вместе с веб-сервером (или сервером приложений). Взаимодействие сервера приложений со скриптом осуществляется при помощи стандартных интерфейсов WSGI и Rack. Такой подход, безусловно, не лишён недостатков, главный из которых, пожалуй, связан с резким ростом накладных расходов при размещении большого числа сайтов на одном сервере, однако, обладает и важным преимуществом: инициализация производится лишь однократно, затем скрипт лишь отвечает на входящие HTTP-запросы.
Читать дальше →
Всего голосов 28: ↑27 и ↓1+26
Комментарии25

Мысли о развёртывании веб-приложений на тестовом сервере

Время на прочтение9 мин
Количество просмотров17K

Предисловие


Нижеследующий текст − результат практического опыта и самообразовательных порывов человека, не имеющего систематического образования ни в одной из областей, о которых он (то есть я) берётся рассуждать. Поэтому заумные рассуждения здесь будут перемежаться банальностями. Бейте меня за первые и игнорируйте вторые. Для кого-то и они могут стать откровением.

Я постараюсь описать идеальные варианты настройки тестового веб-севера, хотя понимаю, какой бардак на них обычно творится. Буду ориентироваться на ситуацию, когда деплоить приходится часто, то есть на сервере живёт проект в стадии активной разработки либо несколько проектов на разных стадиях. Проектами занимаются разные разработчики или команды, поэтому проекты нужно изолировать друг от друга. Но сервер внутренний, поэтому такая степень изоляции и автоматизации процессов администрирования, как на серверах под сдачу в аренду, не нужна.

Основной упор я буду делать на применение разных версий Python в качестве языка поддерживаемых веб-приложений. Хотя многие вещи наверняка будут справедливы и для других языков, например, Ruby или Perl.
Читать дальше →
Всего голосов 12: ↑10 и ↓2+8
Комментарии27

Введение в WSGI-серверы: Часть первая

Время на прочтение5 мин
Количество просмотров134K
Данная статья является переводом статьи Кевина Голдберга «An Introduction to Python WSGI Servers: Part 1» blog.appdynamics.com/engineering/an-introduction-to-python-wsgi-servers-part-1 с небольшими дополнениями от переводчика

image

Краткая история серверов WSGI Python


WSGI-серверы появились потому, что веб-серверы в то время не умели взаимодействовать с приложениями, написанными на языке Python. WSGI (произносится как «whiz-gee» с твердым «g») был разработан Филиппом Дж. Эби (вместе с Ян Бикинг и др.) В начале 2000-х годов. Модуль Apache, известный как mod_python, разработанный Григорием Трубецким в конце 90-х годов, на тот момент обрабатывал большую часть Python-приложений. Однако mod_python не был официальной спецификацией. Он был просто создан, чтобы разработчики могли запускать код Python на сервере. К сожалению, такой подход был небезопасным и разработчики начали искать новое решение.

WSGI(Web-Server Gateway Interface) является потомком CGI(Common Gateway Interface). Когда веб начал развиваться, CGI разрастался из-за поддержки огромного количества языков и из-за отсутствия других решений. Однако, такое решение было медленным и ограниченным. WSGI был разработан как интерфейс для маршрутизации запросов от веб-серверов(Apache, Nginx и т.д.) на веб-приложения.
Читать дальше →
Всего голосов 19: ↑18 и ↓1+17
Комментарии7

Анализ производительности WSGI-серверов: Часть вторая

Время на прочтение6 мин
Количество просмотров27K
Данная статья является переводом статьи Кевина Голдберга «A Performance Analysis of Python WSGI Servers: Part 2» dzone.com/articles/a-performance-analysis-of-python-wsgi-servers-part с небольшими дополнениями от переводчика.

image

Введение


В первой части этой серии Вы познакомились с WSGI и с шестью наиболее популярными по мнению автора WSGI-серверами. В этой части Вам будет показан результат анализа производительности этих серверов. С этой целью была создана специальная тестовая песочница.
Читать дальше →
Всего голосов 13: ↑12 и ↓1+11
Комментарии6

Анализ производительности WSGI-серверов: вернем uWSGI на место

Время на прочтение4 мин
Количество просмотров10K

На прошлой неделе был опубликован перевод статьи двухлетней давности Анализ производительности WSGI-серверов: Часть вторая, где незаслужено был обделен славой uWSGI.


Необходимо срочно перепроверить тесты!


Читать дальше →
Всего голосов 18: ↑18 и ↓0+18
Комментарии9

Проекты Python в рамках Google Summer of Code — gevent

Время на прочтение2 мин
Количество просмотров8.7K
Уже весна, а это значит… что скоро лето и очередное Google Summer of Code — возможность получить кучу опыта и даже какое-то материальное вознаграждение. Хочу рассказать об одном интересном проекте, которому вы сможете помочь во время летних каникул — gevent.
Читать дальше →
Всего голосов 30: ↑27 и ↓3+24
Комментарии24

Diphost — хостинг для фанатов Python

Время на прочтение1 мин
Количество просмотров1.5K
В России очень мало хостингов позволяющих без лишних движений устанавливать Python приложения.

Два года назад покинув Петерхост мы (schors и adnull) не переставали думать о хостинге, работая над проектами с ним не связанными. Мы активно работаем с Python, и вопрос «что делать?» для нас имел один ответ — качественный хостинг для Python приложений.

Хостинг для фанатов Python — DiPHOST

Нам пришлось повозиться: хороший хостинг это не просто возможность запустить приложение, это и грамотная поддержка клиентов, от людей которые что-то понимают не только в хостинге но и в веб-приложениях, удобная панель управления, постоянное развитие сервисов. Очень много вопросов вставало о фундаментальном удобстве использования, при минимальных затратах. И мы сделали это.

За 350-450 рублей в месяц вы получаете полностью администрируемое решение, достаточно залить приложение и уже начать работать.

Если вы еще сомневаетесь — можете взять и попробовать — 7 дней вы можете тестировать наш хостинг в рабочем режиме совершенно бесплатно.

Для фанатов svn/git/bzr/mercurial — вы можете легко развертывать приложение со своего любимого svnserve/github/launchpad/bitbucket — мы поддерживаем все эти VCS.

Но это только начало. Для фанатов rails мы тоже готовим что-то интересное.
Всего голосов 86: ↑69.5 и ↓16.5+53
Комментарии134

Используем память разумно, или mod_wsgi на 256 мегабайтах

Время на прочтение2 мин
Количество просмотров3.2K
Какое-то время назад потребовалось перенести проекты с выделенного сервера на VPS. Для этих целей был выбран slicehost. В общем и целом контора нравится и готов её рекомендовать всем.

Случилась лишь одна проблема: начали приходить уведомления о слишком сильном использовании диска (чтение/запись). Долгое время проблема не находила решения из-за отсутствия времени, но это вылилось в непонятные отказы, сопровождавшиеся статистикой в >200% CPU usage. После долгих извращений, была найдена проблема, а затем и её решение.
Читать дальше →
Всего голосов 42: ↑37 и ↓5+32
Комментарии97

Разворачиваем nginx + mod_wsgi на сервере

Время на прочтение8 мин
Количество просмотров29K
Здрасти. Долго-долго я присматривался к замечательному фреймворку django, читал книгу, изучал статьи, пробовал писать hello world'ы (со встроенным в джангу сервером это было легко и приятно). А вчера я попробовал настроить от начала до конца боевой сервер, и как оказалось, это не так просто, и мне даже показалось, что будь я моложе и неопытнее, я бы плюнул на это дело. Вот я и решил поделиться с читателями полной инструкцией, снабдив её некоторыми рассуждениями и конфигами. Статья расчитана на начинающих, но будет интересно всем, обещаю.
Читать дальше →
Всего голосов 41: ↑38 и ↓3+35
Комментарии24

Используем память разумно. Часть 2. fapws3

Время на прочтение4 мин
Количество просмотров2.4K
В предыдущей части мы начали бороться за память на 256 мегабайтном слайсе «на скорую руку». Результат был, но не столь эффектный как тот которого я добился на этот раз.

Я всегда догадывался, что причина всех моих неприятностей — apache. И чем больше я пытался его настраивать, тем больше в этом убеждался. Вывод? Попробовать заменить. Одно но — переход должен быть как можно более плавным, поскольку речь, ясно дело, о продакшене.

Поскольку у меня был опыт общения с nginx, а если быть точным — опыт с проксированием, то был выбран именно этот веб-сервер. К тому же у него хорошие параметры производительности.
Читать дальше →
Всего голосов 35: ↑31 и ↓4+27
Комментарии79

Сравнение эффективности способов запуска веб-приложений на языке Python

Время на прочтение8 мин
Количество просмотров16K
Последнее время в области веб-разработок стал набирать популярность язык программирования Python. Однако, массовому распространение Python мешает проблема эффективного запуска приложений на этом языке. Пока, в большинстве случаев, это удел выделенных или виртуальных серверов. Модульные языки в отличии от монолитного в базовой функциональности php на каждый запрос подгружают как минимум runtime-библиотеку, а как максимум — ещё несколько десятков запрашиваемых пользователем модулей. Поэтому классический подход наподобие mod_php для Python и Perl не очень уместен, а держать приложение постоянно в памяти было дороговато. Но время движется, техника стала мощнее и дешевле, и уже достаточно давно можно спокойно говорить о постоянно запущенных процессах с приложением в рамках массового хостинга.

О чём тут

Время от времени, в сети появляются различные предложения как запустить приложение на Python. Например, недавно хостинг Джино уникально поправил mod_python и предложил хостинг именно с его помощью. Следом за ним, некий хостинг Locum вообще отринул mod_python с его безопасностью (создаётся впечатление, что суть самобытная безопасность — это единственная проблема АйТи на пути к нирване) и провёл победоносное тестирование modwsgi против fastcgi. Комьюнити же, судя по проведённому мною поиску, разрывается между mod_python и FastCGI. Причём, FastCGI обычно имеется ввиду тот, что идёт в поставке Django — flup. Являясь популярным хостингом Python-приложений, мы не смогли пройти мимо и решили внести свою лепту в эту священную войну.
Читать дальше →
Всего голосов 57: ↑49 и ↓8+41
Комментарии91

mod_wsgi 3.1 вышел 25 ноября

Время на прочтение2 мин
Количество просмотров839
Что было нового в версии 3.0:
  1. Поддержка питона 3.1 и выше.
  2. Опции «process-group», «application-group», «callable-object» и «pass-authorization» могут быть размещены в директивах WSGIScriptAlias и WSGIScriptAliasMatch
  3. Если клиент обрывает соединение в процессе обработки итератора вместо «бросания исключения» теперь записывается отладочное сообщение в лог
  4. В директиву WSGIDaemonProcess добавлена опция «chroot», позволяющая запускать приложения более изолированно
  5. Добавлена глобальная директива WSGIPy3kWarningFlag, при использовании python2.6 будут выдаваться предупреждения
  6. Исправлена «assertion error» если питон был скомпилирован с директивой Py_DEBUG
  7. Добавлена поддержка «Content-Type: chunked» в запросе (директива «WSGIChunkedRequest»). Данные склеиваются и передаются приложению на обработку.
  8. Значения HTTP заголовков теперь передаются в справочнике окружения, для хуков доступа, авторизации и аутентификации
  9. Флаг «flag wsgi.run_once» не выставляется в True, при работе в режиме демона, когда «maximum-requests» установлен в 1. В случае использования множества потоков, параметр «maximum-requests» проверяется только после завершения обработки запроса, поэтому нет гарантии, был ли выполнен только один запрос
  10. Теперь интерпретаор инициализируется не в родительском процессе, а только после того, как будет создан дочерний
  11. Сообщения из модулей-расширений на C попадают в логи виртуальных хостов, как и положено, а не в общий лог, как было ранее
  12. Теперь невозможно писать сообщения в логи «чужих» виртуальных хостов
  13. В режиме демона может производиться внутренняя переадресация с использоваением заголовка «Location» в ответе
  14. В режиме демона может использоваться директива «WSGIErrorOverride», для того, чтобы возвращать стандартные страница ошибок Apache
  15. Добавлена директива «WSGIPythonWarnings» работающая по аналогии с директивой «-W» интерпретатора
  16. В директиву «WSGIDaemonProcess» добавлена опция «cpu-time-limit» определяющая количество процессорного времени, после которого процесс будет перезапущен
  17. В директиву «WSGIDaemonProcess» добавлена опция «cpu-priority» говорящая за себя
  18. Добавлена директива «WSGIHandlerScript» позволяющая определить скрипт, обрабатывающий определённый тип файлов


И ещё множество исправлений и улучшений, о которых можно почитать в оригинале тут: code.google.com/p/modwsgi/wiki/ChangesInVersion0301

Скачать, как обычно можно тут:
code.google.com/p/modwsgi/downloads/list

UPD:
Да, всё работает
./configure --with-python=python3.1 --disable-framework
make && sudo make install
Всего голосов 26: ↑20 и ↓6+14
Комментарии8