Какие из этих платформ / библиотек будут лучшим выбором для создания современных многопользовательских веб-приложений? Я хотел бы иметь асинхронный веб-сервер, который позволит мне легко масштабировать. Какое решение даст наилучшую производительность / масштабируемость / наиболее полезную среду (с точки зрения простоты использования и простоты разработки)?
Было бы здорово, если бы он обеспечивал хорошую функциональность (websockets, rpc, потоковая передача и т. Д.).
Каковы плюсы и минусы каждого решения?
Ответы:
« Django - это веб-фреймворк Python высокого уровня, который способствует быстрой разработке и чистому, прагматичному дизайну» . Если вы создаете что-то похожее на сайт электронной коммерции, то вам, вероятно, стоит пойти с Django. Это сделает вашу работу быстро. Вам не нужно беспокоиться о слишком большом выборе технологий. Он предоставляет все, что вам нужно, от шаблонизатора до ORM. Если вы спросите меня, он будет немного рассуждать о том, как вы структурируете свое приложение, и это хорошо. И это имеет самое сильное сообщество из всех других библиотек, что означает, что легкая помощь доступна.
« Flask - это микрофрейм для Python, основанный на Werkzeug, Jinja 2 и благих намерениях» . Осторожно - «микрос каркас» может вводить в заблуждение. Это не значит, что Flask - это недоделанная библиотека. Это означает, что ядро колбы очень, очень просто. В отличие от Django, он не будет принимать никаких технологических решений для вас. Вы можете выбрать любой шаблонный движок или ORM, которые понравятся вам. Несмотря на то, что он поставляется с шаблонизатором Jinja по умолчанию, вы всегда можете выбрать наш собственный. Насколько я знаю, Flask пригодится для написания конечных точек API (сервисы RESTful).
« Twisted - это управляемый событиями сетевой движок, написанный на python» . Это высокопроизводительный двигатель. Основной причиной его скорости является то, что называется отложенным. Twisted построен поверх отложенных. Для тех из вас, кто не знает о побежденных, именно этот механизм достигается благодаря асинхронной архитектуре. Скручивается очень быстро. Но не подходит для написания обычных веб-приложений. Если вы хотите что-то делать на низкоуровневом уровне, Twisted - ваш друг.
« Tornado - это веб-инфраструктура Python и библиотека асинхронных сетей, изначально разработанная на FriendFeed. Благодаря неблокирующему сетевому вводу-выводу Tornado может масштабироваться до десятков тысяч открытых соединений, что делает его идеальным для длинных опросов, WebSockets и других приложений. которые требуют долговременного подключения к каждому пользователю " . Торнадо стоит где-то между Джанго и Колбой. Если вы хотите что-то написать с Django или Flask, но если вам нужна лучшая производительность, вы можете выбрать Tornado. он может очень хорошо справиться с проблемой C10k, если он правильно спроектирован.
« Cyclone - это платформа веб-сервера для Python, которая реализует API Tornado в виде витого протокола» . А что если вам нужно что-то такое же производительное, как Twisted, но которое легко написать обычными веб-приложениями? Скажи привет циклону. Я бы предпочел Циклон, а не Торнадо. У него есть API, очень похожий на Tornado. На самом деле, это вилка Торнадо. Но проблема в том, что у него относительно небольшое сообщество. Александр Фиори - единственный главный участник репо.
« Pyramid - это общая среда разработки веб-приложений Python с открытым исходным кодом. Ее основная цель - облегчить разработчику Python создание веб-приложений». Я действительно не использовал Пирамиду, но я просмотрел документацию. Из того, что я понимаю, Pyramid очень похожа на Flask, и я думаю, что вы можете использовать Pyramid там, где Flask кажется подходящим, и наоборот.
РЕДАКТИРОВАТЬ : Просьба рассмотреть любые другие рамки приветствуются!
Источник: http://dhilipsiva.com/2013/05/19/python-libraries-django-twisted-tornado-flask-cyclone-and-pyramid.html
источник
Это, очевидно, несколько предвзятый ответ, но это не то же самое, что неправильный ответ; Вы всегда должны использовать Twisted. Я уже отвечал на подобные вопросы раньше, но поскольку ваш вопрос не совсем тот же, вот несколько причин:
"Лучшее представление"
Twisted постоянно следит за нашей работой на веб-сайте speed.twistedmatrix.com . Мы также были одним из первых проектов, которые отслеживались на аналогичном сайте PyPy , что обеспечило хорошую производительность Twisted во время выполнения всем, кто интересуется высокопроизводительными приложениями на Python.
«Масштабируемость»
Насколько мне известно, ни одна из перечисленных платформ не имеет встроенной поддержки автоматического масштабирования; все они являются коммуникационными средами, поэтому вы должны выполнять работу по обмену данными между вашими масштабирующими узлами. Тем не менее, Twisted имеет преимущество во встроенной поддержке локальной многопроцессорной обработки . Справедливости ради, есть стороннее дополнение для Tornado, которое позволяет вам делать то же самое. В последних выпусках Twisted добавлены функции, которые увеличивают количество способов обмена работой между ядрами, и работа в этой области продолжается. В Twisted также есть пара хорошо интегрированных , «родных» RPC-протоколов, которые предлагают конструкторский набор для любого способа масштабирования, который вы хотите использовать.
"Наиболее полезный"
Многие люди считают Twisted очень полезным . Настолько, что многие из них расширили его и сделали свои расширения доступными для вас.
«Функциональность»
Из коробки Twisted включает в себя:
По крайней мере, в этом последнем отделе Twisted явно выигрывает за встроенную функциональность. И все это в пакете чуть более 2 мегабайт!
источник
spawnProcess
это планирование ввода / вывода, можно также преобразовать в планирование ЦП.Мне нравится ответ @Glyph. Twisted - это очень всеобъемлющий, богатый Python Framework. Twisted и Tornado имеют очень похожий дизайн. И мне очень нравится этот дизайн:
Но я хочу выделить Торнадо , который я предпочитаю и в последнее время набираю популярность. Торнадо, как и Twisted, использует программирование в стиле обратного вызова, но его можно встроить с помощью
tornado.gen.engine
(twisted.internet.inlineCallbacks
в Twisted).Codebase
Лучший комментарий с сайта http://cyclone.io . Циклон пытается смешать Twisted и Tornado, потому что:
Но в 2011 году
tornado.platform.twisted
вышел, который приносит аналогичную функциональность.Производительность
Торнадо имеет гораздо лучшую производительность . Он также без проблем работает с PyPy и дает огромный выигрыш.
Масштабируемость
Так же, как Twisted. Tornado имеет
tornado.process
и много rpc-сервисов, реализованных поверх него.функциональность
Есть 71 пакет на основе Торнадо, по сравнению с 148 Twisted и 48 Gevent. Но если вы внимательно посмотрите и вычислите среднее время загрузки пакетов, вы увидите, что Twisted самые старые, а Gevent и Tornado самые свежие. Кроме того, есть
tornado.platform.twisted
модуль, который позволяет запускать код, написанный для Twisted на Tornado .Резюме
С Tornado вы можете использовать код из Twisted. Нет необходимости использовать циклон, который только искажает ваш код (ваш код становится более грязным).
Что касается 2014 года, Tornado считается широко принятой и используемой по умолчанию асинхронной средой, которая работает как на python2, так и на python3. Кроме того, последняя версия 4.x содержит множество функций из https://docs.python.org/dev/library/asyncio.html .
Я написал статью, объясняющую, почему я считаю, что Tornado - лучший веб-фреймворк Python, где я написал гораздо больше о функциональности Tornado.
источник
( ОБНОВЛЕНИЕ : я печально удивлен тем, как мало ответов здесь рекомендуют или даже упоминают Gevent - я не думаю, что это пропорционально популярности, производительности и простоте использования этой превосходной библиотеки!)
Gevent и Twisted не являются взаимоисключающими, хотя на первый взгляд обратное может показаться очевидным. Существует проект,
geventreactor
который позволяет относительно плавно использовать лучшее из обоих миров, а именно:inlineCallbacks
просто не подходит для работы с точки зрения производительности, когда речь идет о многих сопрограммах, и ни в Условия простоты / прозрачности использования:yield
иDeferreds
везде; часто сложно построить какие-то абстракции; ужасно бесполезные следы стека как с голымиDeferred
, так и даже с@inlineCallbacks
.IReactorProcess.spawnProcess
.Я лично в настоящее время использую Gevent 1.0rc2 с Twisted 12.3, соединенным с
geventreactor
. Я реализовал свои собственные еще неопубликованные дополнения и улучшения,geventreactor
которые скоро опубликую, надеюсь, как частьgeventreactor
оригинального репозитория GitHub: https://github.com/jyio/geventreactor .Моя текущая схема позволяет мне программу в славной модели программирования GEvent и рычаги таких вещах, как неблокируемые
socket
,urllib2
и другие модули. Я могу использовать обычный код Python для выполнения обычных задач, в отличие от кривой обучения и неудобств, связанных с выполнением даже простых, базовых вещей Twisted способом. Я также могу легко использовать большинство сторонних библиотек, которые обычно либо не обсуждаются с Twisted, либо требуют использования потоков.Я также могу полностью избежать неуклюжего и часто слишком сложного программирования, основанного на обратном вызове, используя гринлеты (вместо
Deferred
s и обратных вызовов и / или@inlineCallbacks
).(Этот ответ был написан на основе моего личного опыта использования Twisted и Gevent в реальных проектах, со значительно большим опытом использования Twisted (но я не претендую на звание эксперта Twisted). Программное обеспечение, которое я должен был написать, не имеет Вам не пришлось использовать слишком много функций Twisted, поэтому в зависимости от набора функций, который вам требуется от Twisted, (относительно безболезненная) дополнительная сложность смешивания Gevent и Twisted может не стоить проблем.)
источник