Eventlet или gevent или Stackless + Twisted, Pylons, Django и SQL Alchemy

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

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

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

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

Ответ 1

Вы можете проверить:

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

И eventlet и gevent можно было запускать на Stackless, а не на greenlet. В какой-то момент мы даже попытались сделать это как проект GSoC, но не нашли студента.

Ответ 2

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

Cheers,
fijal

Ответ 3

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

Ответ 4

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