Коли використовувати Tornado, коли використовувати Twisted / Cyclone / GEvent / інше [закрито]


181

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

Було б чудово, якщо це забезпечить гарну функціональність (веб-розетки, rpc, потокове передавання тощо).

Які плюси і мінуси кожного рішення?


Чи потрібно, щоб це була одна з цих рам? Що ви плануєте зробити і чи може щось на зразок Джанго, Пілони тощо?
Джо Дохерті

Ні, з корсесом немає, але я б хотів, якщо він буде асинхронним і матиме гарну підтримку веб-розетки - я також оновив питання. Дякую.
Войцех Данило

3
Начебто широке запитання, чи не так?
Жан-Поль Кальдероне

Ваш вибір залежить від бібліотек, які ви хочете використовувати. Ваші бібліотеки - за завданням, яке ви хочете вирішити.
Микола Фоміних

1
Так, вона широка, але може бути помітна. Мені цікаво, чи використовуються ці бібліотеки у виробництві, і хтось, хто користується деякими з них щодня, здатний розповісти, для чого вони чудові, чого їм не вистачає і т. Д. Що має бути базовою лінією для вибору бібліотеки - можливо, Twisted має бути вважається знеціненим, якщо говорити про Автобан чи Циклон? Або mmaybe Autobahn і Cyclone не готові до виробництва, і його підтримка під питанням? А може, Tornado має більш сучасний дизайн, і його майбутнє, мабуть, буде блискучим і чудовим, і це має бути ТИП вибір для стартового проекту?
Войцех Данило

Відповіді:


226

" Django - це веб-система Python високого рівня, яка спонукає до швидкого розвитку та чистого, прагматичного дизайну" . Якщо ви будуєте щось подібне до сайту електронної комерції, то, ймовірно, вам варто піти з Django. Це швидко зробить вашу роботу. Вам не доведеться турбуватися про занадто багато варіантів технології. Він надає все, що вам потрібно, від двигуна шаблону до ORM. Це буде трохи впевнено щодо того, як ви структуруєте додаток, що добре, якщо ви запитаєте мене. І він має найсильнішу спільноту з усіх інших бібліотек, а це означає, що доступна проста допомога.

" Колба - це мікрокадр для Python на основі Werkzeug, Jinja 2 та добрих намірів" . Обережно - "мікрокадр" може ввести в оману. Це не означає, що колба - це напівзапечена бібліотека. Це означає, що серцевина колби дуже-дуже проста. На відміну від Django, він не прийме для вас жодних технологічних рішень. Ви можете вибрати будь-який механізм шаблону або ORM, який вам подобається. Незважаючи на те, що він за замовчуванням постачається з механізмом шаблонів Jinja, ви завжди можете вибрати наш власний. Наскільки мені відомо, Flask корисний для написання кінцевих точок API (RESTful services).

" Twisted - мережевий движок, керований подіями, написаний пітоном" . Це високопродуктивний двигун. Основна причина його швидкості - це щось, що називається відкладеним. Скручений будується поверх відкладених. Для тих із вас, хто не знає про захисників, це механізм, завдяки якому асинхронна архітектура досягається. Скручується дуже швидко. Але не підходить для написання звичайних веб-файлів. Якщо ви хочете зробити щось із мережевих речей низького рівня, ваш друг - перекручений.

" Tornado - це веб-фреймворк і асинхронна мережева бібліотека Python, спочатку розроблений в FriendFeed. Використовуючи неблокуючі мережеві введення-виведення, Tornado може масштабувати до десятків тисяч відкритих підключень, що робить його ідеальним для тривалого опитування, WebSockets та інших програм які потребують довготривалого з'єднання з кожним користувачем " . Торнадо стоїть десь між Джанго і Фляском. Якщо ви хочете щось написати з Django або Flask, але якщо вам потрібна краща вистава, ви можете вибрати Tornado. він може дуже добре впоратися з проблемою C10k, якщо він правильно виконаний.

" Cyclone - це рамка веб-сервера для Python, яка реалізує API Tornado як протокол Twisted" . Тепер, що робити, якщо ви хочете чогось, настільки ж виконуваного, як Скручений, але простий у написанні звичайних веб-сайтів? Привітайтеся з циклоном. Я вважаю за краще Циклон над Торнадо. Він має API, який дуже схожий на Торнадо. Власне кажучи, це виделка Торнадо. Але проблема в тому, що вона має відносно невелику спільноту. Олександр Фіорі - єдиний головний уповноважений репо.

" Pyramid - це загальна, відкрита програма для розробки веб-додатків Python. Основна її мета - спростити розробнику Python створення веб-додатків." Я не дуже використовував Піраміду, але я переглянув документацію. З того, що я розумію, Pyramid дуже схожий на Flask, і я думаю, що ви можете використовувати Pyramid там, де Flask здається доречним і навпаки.

EDIT : Прохання переглянути будь-які інші рамки вітаються!

Джерело: http://dhilipsiva.com/2013/05/19/python-libraries-django-twisted-tornado-flask-cyclone-and-pyramid.html


1
Джанго - це моя краща рамка. Документація дуже хороша, а ORM - це легко. Південь чудово підходить для міграції схем бази даних .... Але питання містило таке: "Я хотів би мати асинхронний веб-сервер, який дозволить мені легко масштабувати". Django був створений для класичних сайтів із запитом + відповідями, а не для асинхронізації.
guettli

1
Ви можете написати про Піраміду?
Фізер Хан

5
@FizerKhan: Відповідно до вашого запиту, я оновив відповідь. Вибачте, пройшло так багато часу. Не встигли використати Піраміду. Але я переглянув документацію.
dhilipsiva

1
Додам, що однопотокове середовище, яке використовує Tornado, значно більш схильне до помилок - помилка, яка робить код для однієї кінцевої точки API повільніше, легко спричинить проблеми для всіх кінцевих точок.
Абель Моліна

1
Не могли б ви прокоментувати вишневий?
Ставрос Аврамідіс

60

Це, очевидно, дещо упереджена відповідь, але це не те саме, що неправильна відповідь; завжди слід використовувати Twisted. Я раніше відповідав на подібні запитання , але оскільки ваше питання не зовсім те саме, ось кілька причин:

"Найкраща продуктивність"

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

"Масштабованість"

Наскільки мені відомо, жодна із перелічених рамок не має вбудованої підтримки для автоматичного масштабування; всі вони є комунікаційними рамками, тому вам доведеться виконати роботу для зв'язку між вашими вузлами масштабування. Однак Twisted має перевагу у вбудованій підтримці локальної багатообробної обробки . Справедливо кажучи, для Tornado існує стороннє доповнення, яке дозволяє вам робити те саме. В останніх випусках Twisted додав функції, які збільшують кількість способів обміну роботою між кернами, і робота в цій області триває. Вітою також має кілька добре інтегровані , «рідні» RPC протоколів , які пропонують будівельно-набір для будь-якої масштабування ідіоми ви хочете продовжити.

"Найкорисніше"

Багато людей, схоже, вважають Скручений дуже корисним . Настільки, що багато хто з них продовжили це і зробили доступними для вас розширення.

"Функціональність"

У коробці Twisted входять:

Принаймні, в цьому останньому відділі Twisted здається явним переможцем вбудованої функціональності. І все це, в пакеті трохи більше 2 мегабайт!


6
чому так багато людей кажуть, що вони вже не використовують Twisted, а GEvent?
remdezx

1
Дуже багато людей говорять, що важко підтримувати великі програми за допомогою Twisted (через архітектуру зворотного виклику): stackoverflow.com/questions/3048012/… Чи не було б краще використовувати Twisted?
Войцех Данило

8
@remdezx Що стосується вашого питання, то є дві причини. Одне полягає в тому, що людям перекручене важко зрозуміти, оскільки паралельне програмування важко зрозуміти. Потім вони переходять на GEvent, тому що це поверхнево легко зрозуміти - доки немає одночасності, все працює так, як ви очікували. Інша причина полягає в тому, що набагато менше роботи для перенесення коду на GEvent, який не був написаний за допомогою API, керованого подіями, щоб отримати переваги від продуктивності введення-виводу, керованого подіями. Якщо ваш код не має надто великого стану, такий порт, ймовірно, працює добре.
Гліф

1
@ Glyph, ти говориш про одночасність, але ... ні Gevent, ні Twisted не підтримують паралельність (звичайно, ти можеш використовувати багатопроцесорну роботу з gevent і використовувати пул справжніх ниток та пул зелених зелень на кожній нитці - що добре працює для мене і Ви можете використовувати плагін Twisted, щоб зробити точно так само - запустіть кілька скручених знаків поруч. Але хіба Twisted збирає вас чимось більше, ніж бачить? Я думаю, що навіть у кількох випадках гевен / кручений, gevent легше підкреслити, не маючи явних зворотних зворотних зв'язків. Я щось пропускаю?
Войцех Данило

2
@ danilo2 Так, вам не вистачає хоча б однієї речі :). Зокрема, ви нерозумієте слово "паралельність", щоб означати "одночасне паралельне виконання на декількох процесорах". Скручений може робити одночасне планування вводу / виводу за допомогою асинхронного (на основі зворотного зв'язку) вводу / виводу. GEvent може робити одночасне планування вводу / виводу за допомогою планувальника мікропотоків. У режимі Twisted за допомогою spawnProcessцього планування вводу / виводу можна перевести і в планування процесора.
Гліф

48

Мені подобається @Glyph відповідь. Скручений - це дуже всебічний, багатий пітонний каркас. Twisted і Tornado мають дуже схожий дизайн. І мені дуже подобається такий дизайн:

  • це швидко
  • легко зрозуміти
  • легко розширюється
  • не потребує c-розширень
  • працює над PyPy.

Але я хочу виділити Торнадо , якому я віддаю перевагу і останнім часом набуваю популярності. Tornado, як і Twisted, використовує програмування стилю зворотного дзвінка, але його можна накреслити за допомогою tornado.gen.engine( twisted.internet.inlineCallbacksв Twisted).

Кодова база

Найкращий коментар - з сайту http://cyclone.io . циклон намагається змішати Скручений та Торнадо, оскільки:

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

Ідея полягає в тому, щоб з'єднати елегантний та простий API Tornado до Twisted’s Event-Loop, що дозволить отримати велику кількість підтримуваних протоколів.

Але в 2011 tornado.platform.twistedроці вийшов, що приносить аналогічну функціональність.

Продуктивність

Торнадо має набагато кращі показники . Він також безперебійно працює з PyPy та отримує величезний прибуток.

Масштабованість

Те саме, що кручений. Tornado має tornado.processі безліч rpc-сервісів, впроваджених поверх нього.

Функціональність

Існує 71 пакет на основі Tornado порівняно із 148 Twisted та 48 Gevent's. Але якщо ви уважно подивитесь і обчислите медіану часу завантаження пакунків, то побачите, що кручені - найстаріші, то Гевент і Торнадо - найсвіжіші. Крім того, є tornado.platform.twistedмодуль, який дозволяє запускати код, написаний для Twisted on Tornado .

Підсумок

З Tornado ви можете використовувати код від Twisted. Не потрібно використовувати циклон, який лише закручує ваш код (ваш код стає більш брудним).

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

Я написав статтю, пояснивши, чому вважаю, що Tornado - найкраща веб-рамка Python, де я писав набагато більше про функціональність Tornado.


15

( ОНОВЛЕННЯ : Я сумно здивований тим, як мало відповідей тут рекомендують або навіть згадують про Гевент - я не думаю, що це пропорційно популярності, продуктивності та простоті використання цієї чудової бібліотеки!)

Gevent і Twisted не є взаємовиключними, хоча спочатку це може здатися очевидним. Існує проект, geventreactorякий називається, який дозволяє відносно плавно використовувати найкраще з обох світів, а саме:

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

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

Моя поточна схема дозволяє мені програму в славної моделі програмування GEvent і важелі таких речах, як Неблокована socket, urllib2і інші модулі. Я можу використовувати звичайний код Python для звичайних речей, на відміну від кривої навчання та незручності робити навіть прості, основні речі закрученим способом. Я також можу легко використовувати більшість сторонніх бібліотек, які зазвичай не виникають сумнівів у Twisted або потребують використання потоків.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.