Eventlet или Gevent или Stackless + Twisted, Pylons, Django и SQL Alchemy - PullRequest
36 голосов
/ 15 июня 2010

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

Возможно, мы рассматриваем смешанный подход.Возможно, сохраните серверную часть xmlrpc и управление процессами в Twisted и внедрите другие компоненты в код, который, по крайней мере, до некоторой степени выглядит синхронно, хотя и не является таковым.С другой стороны, мне больше нравится явное, чем неявное, поэтому я должен подумать об этом немного больше.Во всяком случае на гринлеты - как хорошо это работает?Так что есть Stackless, и, как вы можете видеть из моего Gallentean-аватара, я хорошо знаю о его огромном успехе в использовании его для флагманской онлайн-игры EVE CCP из первых рук.А как насчет Eventlet или Gevent?Ну, пока только Eventlet работает с Twisted.Однако Gevent утверждает, что он быстрее, поскольку это не просто реализация Python, а скорее полагается на libevent.Он также утверждает, что имеет меньше идиосинкразий и дефектов. gevent Насколько я могу судить, его поддерживает один парень.Это делает меня несколько подозрительным, но все великие проекты начинаются таким образом, так что ... Тогда есть PyPy - я еще даже не закончил читать об этом - только что видел в этой теме: НедостаткиStackless .

Так запутанно - мне интересно, какого черта делать - звучит как Eventlet, вероятно, лучшая ставка, но достаточно ли она стабильна?У кого-нибудь есть опыт?Должны ли мы использовать Stackless вместо этого, поскольку он существует и является проверенной технологией - как и Twisted - и они прекрасно работают вместе.Но все же я ненавижу иметь отдельную версию Python для этого.что делать ....

Эта несколько неприятная запись в блоге ударила меня по голове, хотя: Асинхронный ввод-вывод для взрослых Я не понимаю, что Twisted походит на замечание JavaЧто касается меня, Java, как правило, где вы находитесь в потоке мышления, но что угодно.Тем не менее, если эта штука с обезьянами действительно так и работает, то ничего себе.Просто вау!

Ответы [ 4 ]

28 голосов
/ 16 июня 2010

Возможно, вы захотите проверить:

Eventlet и gevent на самом деле не сопоставимы со Stackless, потому что Stackless поставляется со стандартной библиотекой, которая не знает о тасклетах.Существуют реализации сокета для Stackless , но нет ничего более всеобъемлющего, чем gevent.monkey .CCP не использует голые кости Stackless, у него есть что-то, называемое Stackless I / O, которое AFAIK только для окон и никогда не было с открытым исходным кодом (?).

И Eventlet, и Gevent могут работать на Stackless, а не нана гринлете.В какой-то момент мы даже попытались сделать это как GSoC project , но не нашли ученика.

4 голосов
/ 29 июля 2010

Отвечая на часть вашего вопроса - если вы посмотрите на http://speed.pypy.org, вы увидите, что использование витой поверх PyPy может дать вам некоторые ускорения. Конечно, это зависит от вашей рабочей нагрузки, но, вероятно, стоит проверить.

Cheers,
fijal

0 голосов
/ 29 января 2013

Gevent не чистый Python, и он строго зависит от CPython.Из веб-фреймворков, которые вы упомянули, Eventlet (OpenStack) и Tornado (FriendsFeed, Quora) имеет наибольшее развертывание.

0 голосов
/ 23 сентября 2010

Я создал небольшое веб-приложение в реальном времени поверх eventlet и repoze.bfg (я давно разочаровался в django). Я считаю, что исправление событий и патчей для обезьян так же просто, как говорит Тед.

...