Посты с тэгом wsgi


[Из песочницы] SOAP и REST сервисы с помощью Python-библиотеки Spyne

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


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

С помощью Spyne можно писать веб-сервисы, которые умеют работать с SOAP, JSON, YAML, а написанный скрипт можно запустить через mod_wsgi Apache. Итак, давайте рассмотрим несколько примеров, напишем работающие скрипты и настроим так, чтобы скрипты работали через apache. Читать дальше →


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


Предисловие


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

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

Основной упор я буду делать на применение разных верс


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


Введение


В статье хотелось бы поднять вопросы отличия использования Python для web-зазработки по сравнению с оной на PHP. Надеюсь, статья не приведет к холиварам, так как она вовсе не о том, какой язык лучше или хуже, а исключительно о технических особенностях Python.
Читать дальше →


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


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

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


Архитектура Instagram

Instagram — всего лишь iOS, а теперь и Android, приложение для обмена фотографиями с друзьями. Последнее время находится на слуху благодаря новости о покупке проекта Facebook'ом за кругленькую сумму. Недавно один из основателей проекта, Mike Krieger, выступил на конференции с докладом о техническом аспекте проекта, который я и хотел бы вкратце пересказать.

Статистика

  • Начало:
    • 1 сервер слабее Macbook Pro
    • 25к регистраций в первый день
    • 2 разработчика
  • Сегодня:
    • 40+ миллионов пользователей
    • 100+ виртуальных серверов в EC2, в том числе:
    • Проект куплен Facebook за 1 млрд. долл
    • 1 миллион регистраций за 12 часов после запуска Androi


Архитектура Instagram

Instagram - всего лишь iOS, а теперь и Android, приложение для обмена фотографиями с друзьями. Последнее время находится на слуху благодаря новости о покупке проекта Facebook'ом за кругленькую сумму. Недавно один из основателей проекта, Mike Krieger, выступил на конференции с докладом о техническом аспекте проекта, который я и хотел бы вкратце пересказать.

Статистика

Начало:

  • 1 сервер слабее Macbook Pro
  • 25к регистраций в первый день
  • 2 разработчика

Сегодня:

  • 40+ миллионов пользователей
  • 100+ виртуальных серверов в EC2, в том числе:
  • Проект куплен Facebook за 1 млрд. долл
  • 1 миллион регистраций за 12 часов после запуска Android-верс


Python + wsgi для начинающих

Попробуем написать простейший MVC-сайт на Python с применением wsgi. Для просмотра результатов доступна демонстрация, а ниже приведён и разобран её исходный код.
main.py


# -*- coding: UTF-8 -*-
 
# Опишем шаблон страницы
# Тройные кавычки позволяют продлевать строку на несколько строк
html = '''<html>
<head>
    <title>%(title)s</title>
</head>
<body>
<div id="menu">
    %(menu)s
</div>
<div id="content">
    %(content)s
</div>
</body>
</html>
''';
 
# Меню
menu = {'главная': '/', 'новости': '/news/', 'форум': '/forum/'}


Архитектура DISQUS


DISQUS — самая популярная система комментирования и одновременно самое большое в мире Django-приложение. Она установлена более чем на полумиллионе сайтов и блогов, в том числе и очень крупных, таких как Engadget, CNN, MTV, IGN. Основной особенностью в её реализации является тот факт, что DISQUS не является тем сайтом, который хотят увидеть пользователи, он лишь предоставляет механизмы комментирования, авторизации и интеграции с социальными сетями. Пики нагрузки возникают одновременно c



Mongrel2

Если бы не Александр Соловьев, то я бы прошел мимо Mongrel2. А всё потому, что первый Mongrel был Ruby-специфичным инструментом и никогда особо меня не интересовал.

Другое дело Mongrel2. Во-первых, он написан на C. Во-вторых, он не привязан ни к какому из языков. В-третьих, он использует ZeroMQ как транспорт.

По сути, Mongrel2 это балансирующий прокси, который парсит http и отдает запросы в виде сообщений в ZeroMQ и так же получает ответы.

Mongrel2 интересен несколькими моментами.

Быстрый. Все операции по парсингу http (сам Mongrel2) и передачи сообщений (ZeroMQ) берет на себя быстрый C-код.

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



Перезагрузка...

Понадобился веб-сервер для применения в  процессе разработки проектов на insanities. Такие сервера есть у django, werkzeug и т.д. Это удобно и разработчики охотно ими пользуются. Назовем данное явление - “дев-сервер”.

Естественно, требовать от дев-сервера устойчивости к большим нагрузкам и высокой производительности не стоит. По-моему мнению, главное - видеть журнал запросов, выброшенные исключения и просто работать с файлами проекта, забыв о перезагрузке дев-сервера.

Журнал запросов и исключений реализуется при помощи модуля logging, это не интересно. Интересно - как правильно организовать перезагрузку дев-сервера при изменениях в модулях проекта? Задача имеет типовое решение. Главный процесс запускает копию “себя” в новом процессе подкладывая в окружение флаг (1,