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


Синхронный код в асинхронном Twisted, или сказ о том, как скрестить ежа с ужом


Всё хорошо

Twisted — асинхронный (событийно-ориентированный) фреймворк, написанный на Python. Мощное средство для быстрой разработки сетевых (и не только) сервисов. Он разработан с использованием паттерна проектирования Reactor. Сервисы созданные с использованием Twisted быстры и надежны, фреймворк позволяет не писать макаронный код, насыщенный непонятными коллбэками, имеет внутри себя красивые хелперы (Deferred, Transport, Protocol etc). Другими словами, делает нашу жизнь бекенд разработчиков лучше.

Но есть и проблемы

Основная проблема в том, что многочисленные, надежные, оттестированные, удобные библиотеки, использующие в своей основе синхронные модули Python (socket, os, ssl, time, select, thread, subprocess, sys, signal etc), просто возьмут и заблокируют нам основной процесс, цикл реактора и наступит беда. Такими библиотеками, к приме


Синхронный код в асинхронном Twisted, или сказ о том, как скрестить ежа с ужом


Всё хорошо

Twisted — асинхронный (событийно-ориентированный) фреймворк, написанный на Python. Мощное средство для быстрой разработки сетевых (и не только) сервисов. Он разработан с использованием паттерна проектирования Reactor. Сервисы созданные с использованием Twisted быстры и надежны, фреймворк позволяет не писать макаронный код, насыщенный непонятными коллбэками, имеет внутри себя красивые хелперы (Deferred, Transport, Protocol etc). Другими словами, делает нашу жизнь бекенд разработчиков лучше.

Но есть и проблемы

Основная проблема в том, что многочисленные, надежные, оттестированные, удобные библиотеки, использующие в своей основе синхронные модули Python (socket, os, ssl, time, select, thread, subprocess, sys, signal etc), просто возьмут и заблокируют нам основной процесс, цикл реактора и наступит беда. Такими библиотеками, к приме


Moscow Python Meetup на тему «Async: why and when?» в офисе Rambler&Co




Друзья, спешу сообщить, что 28 мая в 19:00 в офисе компании Rambler&Co пройдет встреча сообщества Moscow Python Meetup. Тема встречи — «Async: why and when?».

В программе интересные доклады, общение, холивары и море позитива.
Читать дальше →


Moscow Python Meetup на тему «Async: why and when?» в офисе Rambler&Co




Друзья, спешу сообщить, что 28 мая в 19:00 в офисе компании Rambler&Co пройдет встреча сообщества Moscow Python Meetup. Тема встречи — «Async: why and when?».

В программе интересные доклады, общение, холивары и море позитива.
Читать дальше →


Асинхронная работа с Tarantool на Python


На Хабре уже есть статьи о NoSQL СУБД Tarantool и о том, как его используют в Mail.Ru Group (и не только). Однако нет рецептов того, как работать с Tarantool на Python. В своей статье я хочу рассказать о том, как мы готовим Tarantool Python в своих проектах, какие проблемы и сложности при этом возникают, плюсы, минусы, подводные камни и, конечно же, «в чем фишка». Итак, обо всем по порядку.



Tarantool представляет собой Application Server для Lua. Он умеет хранить данные на диске, обеспечивает быстрый доступ к ним. Tarantool используется в задачах с большими потоками данных в единицу времени. Если говорить о цифрах, то это десятки и сотни тысяч операций в секунду. Например, в одном из моих проектов генерируется более 80 000 запросов в секунду (выборка, вставка, обновление, уда


Впечатления от посещения EuroPython 2014


Одна из отличительных особенностей языка Python — это посвящённые этому языку конференции, так называемые PyConы. Не так давно мне удалось побывать на одном таком PyCon-е — EuroPython 2014. EuroPython — это одна из наиболее крупных европейских ежегодных конференций по языку Python, которая три последних года проводилась во Флоренции, а в 2014м — первый раз в Берлине. Пока свежи воспоминания решил написать небольшой отчётик — что и как было.
Читать дальше →


[Из песочницы] Немного тестов производительности сетевых фреймворков


Привет Хабр! Пару месяцев назад я захотел провести тестирование производительности некоторых сетевых фреймворков, c целью понять насколько большая разбежка между ними. Надо ли использовать Node.js там, где хотелось бы Python с Gevent или нужен Ruby с его EventMachine.

Я хочу обратить ваше внимание на то, что эти материалы не являются руководством к выбору фреймворка и могут содержать спорные моменты. Я вообще не собирался публиковать результаты этого исследования, но когда они попадались мне на глаза я ловил себя на мысли, что это может быть кому-нибудь полезно. На этот пост я выделил не больше 4-ех часов, иначе он не появился бы, поэтому от орфографических ошибок, как и от любых других, я не застрахован. Теперь, когда вы ко всему готовы, я начну забрасывать вас графиками.
Читать дальше →


Gevent - coroutines in Python

Какое же было мое разочарование, когда я узнал, что в Python нельзя использовать несколько рабочих потоков. Во всем виноват GIL(глобальная блокировка интерпретатора), которая ограничивает работу потоков только одним рабочим.

Но мы можем использовать гринлеты - аналоги гоурутин в Go. Они запускаются внутри программы. но не стоит забывать, что только один гринлет работает в одно и то же время.

К примеру, мы можем запустить 3 гринлета и заблокировать каждый из них с помощью метода select:

Хмм, магия? Может быть.

Есть два вида контроля гринлетов: группы и пулы. Группы нужны, чтобы просто объеденить их, а пулы - чтобы ограничить их число. Когда гринлет выполняется, он удаляется из группы.

А чтобы эти микропотоки умели общаться между собой, есть Event - один гринлет будет выполняться, а другой - ждать:



Python Meetup: ноябрьская встреча




В конце ноября в Минске прошла очередная встреча Python Meetup. Четыре интереснейших доклада на около-python-овские темы, авторитетные спикеры. Кстати, впервые к нам приехал спикер не из Беларуси — это был Андрей Власовский, опытный докладчик из компании JetBrains.

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


[Из песочницы] Django ORM, gevent и грабли в зелени

Очень многие выбирают Django за его простоту. Код на Django прост и лаконичен, мы меньше думаем о костылях и больше о бизнес-логике.

Gevent тоже выбирают из-за того, что он простой, очень шустрый и не несёт за собой callback hell.

В голове возникает великолепная идея совместить две простые и удобные вещи вместе. Мы патчим Django и радуемся простоте, лаконичности и производительности, делаем множество запросов на другие сайты, создаём подпроцессы, в общем используем наш новый асинхронный Django по максимуму.
Но совместив их, мы незаметно для себя поставили несколько граблей на нашем пути.
Читать дальше →