Давно не писал обзоры приложений и библиотек, но эта мне так понравилась, что не удержался.

Работа с потоками всегда была не самым лёгким занятием для программистов. А если брать особенность работы с потоками в Python ветки 2.x и 3.x (не считая версий 3.2 и 2.7), то кроме потоков нам на голову падали ещё проблемы в GIL (Global Interpreter Lock). Но прогресс не стоит на месте и многопоточность используется уже практически везде. Проблема с cuncerrency встречается всё чаще и решать её приходится так же часто. 

При необходимости реализации такой задачи мне под руку попалась библиотеке eventlet (http://eventlet.net/), которая уже использовалась у нас на проекте и мне очень понравилась. Основная задача этой библиотеки - дать возможность реализации высокомашстабируемых не блокирующих I/O задач (highly scalable nonblocking I/O).

Описывать подробно все достоинства и недостатки данной библиотеки не буду, т.к. таких пока было обнаружено не слишком уж много. Больше всего, что мне не понравилось - это, на мой взгляд, не очень хорошая документация (http://eventlet.net/doc/), но открытые исходники с подробными комментариями и кучей примеров эту проблему решили.

В рамках моей задачи, мне понадобилось сделать какое-то подобие COMET-сервера с помощью long polling - один из способов сделать push-уведомления (http://en.wikipedia.org/wiki/Push_technology) для веб-приложений. Основная особенность - клиент делает один за другим (ajax)запросы на сервер, а сервер, в свою очередь отвечает клиенту только тогда, когда у него появились необходимые данные.

Простой пример такого приложения на Django доступен на гитхабе: https://github.com/e0ne/BlogSamples/tree/master/djangolp


Comments

Denis Russia

Thursday, August 18, 2011 6:41 AM

Denis

Рекомендую также посмотреть на gevent (gevent.org), вот здесь описаны некоторые различия: http://blog.gevent.org/2010/02/27/why-gevent/

Comments are closed