Торнадо фреймворк - логотип

Для написания собственной асинхронной библиотеки с помощью фреймворка Tornado будем использовать декоратор tornado.gen. Результат выполнения возвращается с помощью callback. Необходимо так же понимать, что при написании обертки над синхронными библиотеками, они не станут асинхронными. И вызов yield gen.Task(my_func, my_arg) - не выполниться асинхронно, если my_func - будет синхронной.

Пример асинхронной библиотеки...

Категории: Python

Простое параллельное выполнение кода с помощью concurrent.futuresНачиная с версии 3.3, в Python включен многообещающий модуль concurrent.futures, с элегантным менеджером контекста для параллельно выполняющихся задач. Благодаря простоте и совместимости интерфейса вы можете использовать выполнение задач в отдельных потоках или процессах, прилагая при этом минимальные усилия.

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

Категории: Python

Блокирующие операции в Tornado

2014-03-06 14:04
Просмотры: 4001

Tornado frameworkВ рассылке Tornado возникло обсуждение на счет блокирующих операций и способов решения обхода блокировки при выполнении. Оказывается, есть 3 приемлемые варианты, в порядке возрастания сложности:

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

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

- Использование асинхронных драйверов или библиотек для запуска задач или выполнения операций. Например, gevent, motor или что то подобное.

Этот пост о втором способе реализации с частичным использованием Python пакета concurrent.futures.

Категории: Python

Tornado frameworkДля начинающих асинхронное программирование может показаться сложным, поэтому нужно освоить базовые понятия, чтобы избежать распространенных ошибок. В интернете есть много полезных ресурсов на которых описаны основные концепции асинхронного программирования. Но сейчас мы остановимся на асинхронном программировании с помощью Python фреймворка Tornado.

С домашней страницы Tornado:

Веб сервер проекта FriendFeed это относительно простой, не блокируемый веб сервер написанный на Python. Приложение FriendFeed написано на фреймворке подобно web.py или webapp от Google, но с дополнительными инструментами и оптимизацией для использования неблокируемого веб сервера. Tornado это общедоступная версия этого веб сервера с наиболее часто используемыми инструментами в FriendFeed. Фреймворк отличается от основных веб фреймворков(а так же от большинства Python фреймворков) тем что он не блокируемый и достаточно быстрый. Не блокируемый, потому что использует epoll или kqueue, и может обрабатывать тысячи одновременных постоянных соединений, что идеально для веб сервисов работающих в реальном времени. Мы спроектировали веб сервер специально для обработки открытых активных соединений в реальном времени. (Для более детальной информации о масштабировании серверов поддерживающих тысячи соединений, смотрите проблему C10K).

Категории: Python

Django logoПри разработке проекта на Django бывают случаи, когда нужно сделать запуск скрипта не через веб интерфейс, например из консоли или добавить скрипт в cron. Но при этом хотелось бы оставить весь функционал и особенности фреймворка, такие как ORM или работа с моделями.

Для этого нам нужно две вещи: запуск скрипта в определенном виртуальном окружении, в том окружении с которым работает Django и сам импорт Django-проекта и настроек в наш скрипт.

Категории: Python

django pythonЧто бы не засорять системный("глобальный") Python различными модулями, пакетами, библиотеками есть удобная и невероятно необходимая вещь - Virtualenv.

Virtualenv - инструмент, который создает отдельное, изолированое окружение для Python. Это очень удобно, например: создание локальной версии Python для отдельного проекта; разграничение версий библиотек или модулей для разных...

Категории: Python

Бесплатный PyCharm Community Edition

2013-09-26 01:09
Просмотры: 7966

PyCharm 3.0 — IDE для разработки на языке Python — выпущена в двух редакциях: бесплатной Community Edition с открытым исходным кодом и полнофункциональной Professional Edition.
 

Бесплатная редакция PyCharm основана на открытом коде, зато платная содержит полную функциональность.

PyCharm Community Edition создана для разработчиков, которые пользуются чистым Python. Эта редакция поддерживает все самое главное: «интеллектуальный» редактор кода с поддержкой все того же умного автодополнения, всех рефакторингов, инспекций кода, интеграции с большинством систем контроля версий, графический отладчик и многое другое.

Категории: Python

django

Разработчики свободного фреймворка Django в срочном порядке выпустили обновленные версии Django 1.4.8, Django 1.5.4 и Django 1.6 beta 4, чтобы закрыть уязвимость, которую публично разгласили посторонние лица утром того же дня(15 сентября). Все патчи доступны через PyPI (https://pypi.python.org/pypi/Django) и со страницы загрузки (https://www.djangoproject.com/download/).

Категории: Python