Когда использовать Торнадо, когда использовать витой / циклон / GEvent / другое [закрыто]


какие из этих фреймворков / библиотек были бы лучшим выбором для создания современного многопользовательского веб-приложения? Я хотел бы иметь асинхронный веб-сервер, который позволит мне легко масштабироваться. Какое решение даст лучшие показатели/масштабируемость/самый полезный фреймворк (С точки зрения простоты использования и простоты разработки)?

было бы здорово, если это обеспечит хорошее функциональность (websockets, rpc, потоковая передача и т. д.).

каковы плюсы и минусы каждого решения?

4 176

4 ответа:

"Джанго Это высокоуровневая веб-платформа Python, которая поощряет быстрое развитие и чистый, прагматичный дизайн". Если вы создаете что-то похожее на сайт электронной коммерции, то вы, вероятно, должны пойти с Django. Это позволит быстро сделать вашу работу. Вам не придется беспокоиться о слишком большом выборе технологий. Он предоставляет все, что вам нужно от шаблонного движка до ORM. Это будет немного упрямый структура ваше приложение, которое хорошо, если вы спросите меня. И у него самое сильное сообщество из всех других библиотек, что означает, что доступна легкая помощь.

"колбы - это microframework для Python на основе сверла, Джимма 2 и добрыми намерениями". Остерегайтесь - "microframework" может ввести в заблуждение. Это не значит, что колба-это наполовину испеченная библиотека. Это означает, что ядро колбы очень и очень просто. В отличие от Django, он не будет принимать никаких технологических решений для тебя. Вы можете выбрать любой шаблонный движок или ОРМ, который вам нравится. Даже если он поставляется с Jinja template engine по умолчанию, вы всегда можете выбрать наш собственный. Насколько я знаю, Flask пригодится для написания конечных точек API (RESTful services).

"витая это управляемый событиями сетевой движок, написанный на python". Это высокопроизводительный двигатель. Основной причиной его скорости является то, что называется отложенным. Витой построен на вершине deferreds. Для тех из вас, кто не знает о defereds, это механизм через с асинхронной архитектурой достигается. Крутил очень быстро. Но не подходит для написания обычных веб-приложений. Если вы хотите сделать что-то низкоуровневое сетевое оборудование, twisted-ваш друг.

"Торнадо представляет собой веб-фреймворк Python и асинхронную сетевую библиотеку, первоначально разработанную в FriendFeed. С помощью неблокирующего сетевой ввод-вывод, Tornado может масштабироваться до десятков тысяч открытых соединений, что делает его идеальным для длительного опроса, веб-сайтов и других приложений, которые требуют длительного подключения к каждому пользователю". Торнадо стоит где-то между Джанго и фляжкой. Если вы хотите написать что-то с Django или Flask, но если вам нужна лучшая производительность, вы можете выбрать Tornado. он может справиться с проблемой C10k очень хорошо, если он спроектирован право.

"циклон это веб-серверная платформа для Python, которая реализует API Tornado в виде скрученного протокола". Теперь, что делать, если вы хотите что-то, что почти так же эффективно, как Twisted, но легко писать обычные веб-приложения? Поздоровайся с циклоном. Я бы предпочел циклон Торнадо. Он имеет API, который очень похож на Торнадо. По сути, это развилка Торнадо. Но проблема в том, что у него относительно небольшое сообщество. Александр Фиори является единственным главным коммитером РЕПО.

"пирамиды является общей, с открытым исходным кодом, Python рамки разработки веб-приложений. Его основной целью является, чтобы сделать его проще для разработчиков Python для создания веб-приложений." Я действительно не использовал пирамиду, но я просмотрел документацию. Из того, что я понимаю, пирамида очень похожа на колбы и я думаю, что вы можете использовать пирамиду, где колбы кажется уместным и наоборот.

EDIT: просьба рассмотреть любые другие рамки приветствуются!

источник: http://dhilipsiva.com/2013/05/19/python-libraries-django-twisted-tornado-flask-cyclone-and-pyramid.html

Это очевидно a несколько предвзята ответ, но это не то же самое как неправильно ответ; вы всегда должны использовать Twisted. Я ответил подобные вопросы раньше, но поскольку ваш вопрос не совсем то же самое, вот несколько причин:

"Лучшее Исполнение"

переплетенный непрерывно контролирует наше представление на speed.twistedmatrix.com Сайт. Мы также были одним из первых проектов для мониторинга на аналогичном сайте PyPy, тем самым гарантируя хорошую производительность Twisted во время выполнения, что любой, кто связан с высокопроизводительными приложениями в Python.

"масштабируемость"

насколько мне известно, ни один из перечисленных фреймворков не имеет встроенной поддержки автоматического масштабирования; все они являются коммуникационными фреймворками, поэтому вам нужно выполнять работу по взаимодействию между вашими узлами масштабирования. Тем не менее, Twisted имеет преимущество в своем встроена поддержка локальной мульти-обработки. Справедливости ради, есть стороннее дополнение для Tornado это позволяет вам делать то же самое. В последних выпусках,Twisted добавил функции это увеличивает количество способов совместного использования работы между ядрами, и работа в этой области продолжается. Twisted также имеет пару хорошо интегрированными,"родные" протоколы RPC, которые предлагают конструктор для любого масштабирования идиома, которую вы хотите преследовать.

"Самый Полезный"

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

"функции"

из коробки, витой включает в себя:

в этом последнем отделе, по крайней мере, Twisted кажется явным победителем для встроенного функционала. И все это, в пакете чуть более 2 мегабайт!

мне нравится @Glyph ответ. Twisted-это очень всеобъемлющий, богатый фреймворк python. Витой и Торнадо имеют очень похожий дизайн. И мне очень нравится этот дизайн:

  • быстро
  • легко понять
  • легко расширить
  • не требуется С-с расширениями
  • работает на PyPy.

но я хочу выделить Торнадо, которые я предпочитаю и в последнее время набирают популярность. Торнадо, как и Twisted, использует Программирование стиля обратного вызова, но его можно встроить с помощью tornado.gen.engine (twisted.internet.inlineCallbacks in Twisted).

Codebase

лучший комментарий от http://cyclone.io сайт. циклон пытается смешать Витой и Торнадо, потому что:

Twisted является одной из самых зрелых библиотек для неблокирующего ввода / вывода, доступных для общественный. Tornado-это версия веб-сервера FriendFeed с открытым исходным кодом, один из самых популярных и быстрые веб-серверы для Python, с очень приличный API для создания веб-приложений.

идея состоит в том, чтобы соединить элегантный и простой API Tornado Цикл событий Twisted, позволяющий использовать огромное количество поддерживаемых протоколов.

но в 2011 году tornado.platform.twisted был, который приносит аналогичную функциональность.

производительность

торнадо имеет гораздо лучше производительность. Он также работает без проблем с PyPy, и получить огромный прибыль.

масштабируемость

то же самое, как витой. Торнадо имеет tornado.process и множество сервисов rpc, реализованных поверх него.

функциональность

есть 71 пакет на основе Торнадо, по сравнению с 148 Twisted и 48 Gevent В. Но если вы внимательно посмотрите и вычислите медиану времени загрузки пакетов, вы увидите, что Twisted являются самыми старыми, а затем Gevent и Tornado самыми свежими. Кроме того, есть tornado.platform.twisted модуль, который позволяет вам запустите код, написанный для Twisted on Tornado.

резюме

С Торнадо вы можете использовать код от Twisted. Там нет необходимости использовать циклон, который только наворотили ваш код (ваш код становится более грязным).

Что касается 2014 года, Tornado считается широко распространенной и стандартной асинхронной структурой, которая работает как на python2, так и на python3. Также последняя версия 4.x приносит много функциональности от https://docs.python.org/dev/library/asyncio.html.

я написал статью, объясняя, почему я считаю, что Торнадо-лучший Python web framework где я написал гораздо больше о функциональности Торнадо.

(обновление: я очень удивлен тем, как мало ответов здесь рекомендуют или даже упоминают Gevent-я не думаю, что это пропорционально популярности, производительности и простоте использования этой отличной библиотеки!)

Gevent и Twisted не являются взаимоисключающими, хотя на первый взгляд может показаться очевидным обратное. Есть проект под названием geventreactor что позволяет относительно спокойно использовать лучшее из обоих миров, а именно:

  • в эффективная и дешевая (кооперативная зеленая) потоковая модель Gevent, которая намного проще программируется, когда речь заходит о параллелизме-честно говоря, Twisted's inlineCallbacks просто не подходит для работы с точки зрения производительности, когда речь заходит о многих сопрограммах, и ни с точки зрения простоты / прозрачности использования:yield и Deferreds везде; часто трудно построить некоторые абстракции; ужасающе бесполезные следы стека с обоими голыми Deferreds, а также, и тем более с @inlineCallbacks.
  • все встроенная функциональность Twisted вы можете когда-нибудь мечтать, в том числе, но не ограничиваясь IReactorProcess.spawnProcess.

я лично в настоящее время использую Gevent 1.0rc2 с Twisted 12.3 bridged by geventreactor. Я реализовал свои собственные пока еще неопубликованные дополнения и улучшения к geventreactor который я опубликую в ближайшее время, надеюсь, как часть geventreactorоригинальный репозиторий GitHub:https://github.com/jyio/geventreactor.

мой текущий макет позволяет мне программу в хорошей модели программирования Gevent и использовать такие вещи, как неблокирующий socket,urllib2 и другие модули. Я могу использовать обычный код Python для выполнения обычных вещей, в отличие от кривой обучения и неудобства выполнения даже простых, базовых вещей скрученным способом. Я также могу легко использовать большинство сторонних библиотек, которые обычно либо не обсуждаются с Twisted, либо требуют использования потоков.

я также могу полностью избежать неловкого и часто чрезмерно сложное программирование на основе обратного вызова с использованием greenlets (вместо Deferreds и обратные вызовы, и / или @inlineCallbacks).

(этот ответ был написан на основе моего личного опыта использования как Twisted, так и Gevent в реальных проектах, со значительно большим опытом использования Twisted (но я не претендую на роль эксперта Twisted). Программное обеспечение, которое мне пришлось написать, не должно было использовать слишком много функций Twisted, поэтому в зависимости от набора функций, которые вам требуются от Twisted, (относительно безболезненно) дополнительная сложность смешивания Gevent и Twisted может не стоить хлопот.)