[python] Tornado 사용시기, Twisted / Cyclone / GEvent / 기타 사용시기 [폐쇄]

현대의 멀티 유저 웹 애플리케이션을 구축하기에 가장 적합한 프레임 워크 / 라이브러리는 무엇입니까? 비동기식 웹 서버를 사용하여 쉽게 확장 할 수 있습니다. 어떤 솔루션이 최상의 성능 / 확장 성 / 가장 유용한 프레임 워크를 제공 합니까 (사용하기 쉽고 개발하기 쉬운 측면에서)?

좋은 기능 (웹 소켓, rpc, 스트리밍 등) 을 제공한다면 좋을 것 입니다.

각 솔루션의 장단점은 무엇입니까?



답변

Django 는 빠른 개발과 깨끗하고 실용적인 디자인을 장려하는 고급 Python 웹 프레임 워크입니다 . 전자 상거래 사이트와 유사한 것을 구축하고 있다면 아마도 장고와 함께 가야 할 것입니다. 작업이 빠르게 완료됩니다. 너무 많은 기술 선택에 대해 걱정할 필요가 없습니다. 템플릿 엔진에서 ORM에 이르기까지 필요한 모든 것을 제공합니다. 앱을 구성하는 방식에 대해 약간의 의견이있을 것입니다. 또한 다른 모든 라이브러리 중에서 가장 강력한 커뮤니티를 보유하고 있으므로 쉽게 도움을받을 수 있습니다.

Flask 는 Werkzeug, Jinja 2 및 좋은 의도에 기반한 Python의 마이크로 프레임 워크입니다 . “마이크로 프레임 워크”는 오해의 소지가 있습니다. 이것이 Flask가 반 구운 라이브러리라는 것을 의미하지는 않습니다. 이것은 플라스크의 핵심이 매우 간단하다는 것을 의미합니다. Django와 달리 기술 결정은 없습니다. 원하는 템플릿 엔진 또는 ORM을 자유롭게 선택할 수 있습니다. 기본적으로 Jinja 템플릿 엔진과 함께 제공되지만 항상 자신의 것을 자유롭게 선택할 수 있습니다. 내가 아는 한 Flask는 API 엔드 포인트 (RESTful 서비스)를 작성하는 데 편리합니다.

Twisted 는 파이썬으로 작성된 이벤트 중심 네트워킹 엔진입니다 . 고성능 엔진입니다. 속도의 주된 이유는 연기 된 것입니다. 트위스트는 지연된 항목 위에 구축됩니다. 연기에 대해 모르는 사람들에게는 비동기 아키텍처를 통한 메커니즘이 달성됩니다. 트위스트는 매우 빠릅니다. 그러나 기존 웹앱을 작성하는 데는 적합하지 않습니다. 저수준 네트워킹 물건을 원한다면 친구가 뒤틀린 것입니다.

Tornado 는 원래 FriendFeed에서 개발 한 Python 웹 프레임 워크 및 비동기 네트워킹 라이브러리입니다. 비 차단 네트워크 I / O를 사용하여 Tornado는 수만 개의 개방형 연결로 확장 할 수 있으므로 긴 폴링, WebSocket 및 기타 응용 프로그램에 이상적입니다. 각 사용자에게 오래 지속되어야합니다 “ . 토네이도는 장고와 플라스크 사이에 있습니다. Django 또는 Flask로 무언가를 쓰고 싶지만 더 나은 성능이 필요하면 Tornado를 선택할 수 있습니다. 제대로 설계되면 C10k 문제를 매우 잘 처리 할 수 ​​있습니다.

Cyclone 은 Tornado API를 Twisted 프로토콜로 구현하는 Python 용 웹 서버 프레임 워크입니다 . 트위스트만큼이나 성능이 뛰어나고 기존 웹앱을 작성하기 쉬운 것을 원한다면 어떻게해야할까요? 사이클론에게 인사하십시오. 나는 토네이도보다 사이클론을 선호합니다. 토네이도와 매우 유사한 API가 있습니다. 사실, 이것은 토네이도의 포크입니다. 그러나 문제는 그것이 상대적으로 작은 공동체라는 것입니다. 알렉산드르 피오리 (Alexandre Fiori)는 레포에 대한 유일한 주요 커미터입니다.

Pyramid 는 일반적인 오픈 소스 Python 웹 응용 프로그램 개발 프레임 워크입니다. 주요 목표는 Python 개발자가 웹 응용 프로그램을보다 쉽게 ​​만들 수 있도록하는 것입니다.” 나는 실제로 피라미드를 사용하지는 않았지만 문서를 살펴 보았습니다. 내가 이해에서 피라미드와 매우 유사하다 플라스크 나는 어디든지 당신이 피라미드를 사용할 수 있다고 생각 플라스크가 적절한 것 같다 그 반대의 경우도 마찬가지입니다.

편집 : 다른 프레임 워크 검토 요청을 환영합니다!

출처 : http://dhilipsiva.com/2013/05/19/python-libraries-django-twisted-tornado-flask-cyclone-and-pyramid.html


답변

이것은 분명히 다소 편향된 답변이지만 잘못된 답변 과는 다릅니다 . 항상 Twisted를 사용해야합니다. 이전 에 비슷한 질문 에 답변 했지만 귀하의 질문이 동일하지 않기 때문에 몇 가지 이유가 있습니다.

“최고의 성능”

Twisted는 speed.twistedmatrix.com 웹 사이트 에서 지속적으로 성능을 모니터링합니다 . 또한 PyPy의 유사한 사이트 에서 모니터링 하는 첫 번째 프로젝트 중 하나 였으므로 누구나 Python의 고성능 응용 프로그램과 관련된 런타임에서 Twisted의 우수한 성능을 보장했습니다.

“확장 성”

내가 알기로는 나열된 프레임 워크 중 어느 것도 자동 스케일링을 기본적으로 지원하지 않습니다. 그것들은 모두 통신 프레임 워크이므로 스케일링 노드 사이에서 통신하려면 작업을 수행해야합니다. 그러나 Twisted는 로컬 다중 처리를 기본적으로 지원 한다는 이점이 있습니다. 공정 하게도 Tornado 용 타사 애드온 이있어 동일한 작업을 수행 할 수 있습니다. 최근 릴리스에서 Twisted는 코어간에 작업을 공유 할 수있는 방법의 수를 늘리는 기능추가 했으며 해당 영역에서 작업이 진행 중입니다. 트위스트는 몇 가지가 잘 통합 , “네이티브” 당신이 추구 원하는 스케일링 관용구를위한 건설 키트를 제공하는 RPC 프로토콜을.

“가장 유용한”

많은 사람들 이 Twisted가 매우 유용하다고 생각합니다 . 너무 많은 사람들이 그것을 확장하고 확장 기능을 사용할 수 있도록했습니다.

“기능”

Twisted는 기본적으로 다음을 포함합니다.

이 마지막 부서에서 최소한 Twisted는 기본 제공 기능의 확실한 승자로 보입니다. 그리고이 모든 것이 2MB 이상의 패키지로 제공됩니다!


답변

@Glyph 응답이 마음에 듭니다. Twisted는 매우 포괄적이고 풍부한 파이썬 프레임 워크입니다. 트위스트와 토네이도는 매우 비슷한 디자인입니다. 그리고 나는이 디자인을 매우 좋아합니다.

  • 빠르다
  • 이해하기 쉬운
  • 확장하기 쉬운
  • C 확장이 필요하지 않습니다
  • PyPy에서 작동합니다.

그러나 나는 토네이도 를 강조하고 싶습니다 . Twisted와 마찬가지로 Tornado는 콜백 스타일 프로그래밍을 사용하지만 tornado.gen.engine( twisted.internet.inlineCallbacksTwisted에서)를 사용하여 인라인 할 수 있습니다 .

코드베이스

가장 좋은 의견은 http://cyclone.io 사이트입니다. cyclone은 다음 과 같은 이유로 Twisted와 Tornado를 혼합하려고 시도합니다.

Twisted는 일반인이 이용할 수있는 비 차단 I / O를위한 가장 성숙한 라이브러리 중 하나입니다. 토네이도는 웹 애플리케이션 구축을위한 매우 적절한 API를 갖춘 가장 인기 있고 빠른 Python 웹 서버 중 하나 인 FriendFeed 웹 서버의 오픈 소스 버전입니다.

아이디어는 토네이도의 우아하고 간단한 API를 Twisted의 Event-Loop에 연결하여 수많은 지원 프로토콜을 가능하게하는 것입니다.

그러나 2011 년 tornado.platform.twisted에 비슷한 기능을 제공합니다.

공연

토네이도는 훨씬 더 나은 성능을 가지고 있습니다. 또한 PyPy와 완벽하게 작동하며 큰 이익을 얻습니다.

확장 성

꼬인 것과 같습니다. 토네이도에는 tornado.process많은 rpc 서비스가 구현되어 있습니다.

기능성

148 개의 Twisted와 48 개의 Gevent에 비해 71 개의 Tornado 기반 패키지가 있습니다. 그러나 신중하게 살펴보고 패키지 업로드 시간의 중앙값을 계산하면 꼬인 패키지가 가장 오래된 것, Gevent 및 Tornado가 가장 신선한 것을 볼 수 있습니다. 또한 Tornado에서 Twisted 용으로 작성된 코드tornado.platform.twisted실행할 수있는 모듈이 있습니다 .

요약

Tornado를 사용하면 Twisted의 코드를 사용할 수 있습니다. 코드를 왜곡 시키는 사이클론을 사용할 필요가 없습니다 (코드가 더 복잡해집니다).

2014 년 토네이도는 python2와 python3 모두에서 작동하는 널리 사용되는 기본 비동기 프레임 워크로 간주됩니다. 또한 최신 버전 4.x는 https://docs.python.org/dev/library/asyncio.html 에서 많은 기능을 제공합니다 .

Tornado- Tornado 기능에 대해 더 많이 쓴 최고의 Python 웹 프레임 워크 인 Tornado를 고려한 이유를 설명하는 기사를 작성했습니다 .


답변

( 업데이트 : Gevent가 권장하거나 언급하지 않는 답변에 대해 슬프게도 놀랐습니다.이 우수한 라이브러리의 인기, 성능 및 사용 편의성에 비례한다고 생각하지 않습니다!)

Gevent와 Twisted는 처음에는 그 반대가 명백해 보일지라도 상호 배타적이지 않습니다. geventreactor두 세계의 장점을 비교적 원활하게 활용할 수 있는 프로젝트 가 있습니다.

  • Gevent의 효율적이고 저렴한 (협조적 녹색) 스레드 모델로서 동시성에 대해 프로그래밍하기가 훨씬 쉽습니다. 솔직히 말해서, Twisted inlineCallbacks는 많은 코 루틴과 관련하여 성능 측면에서 그다지 중요하지 않습니다. 사용의 용이성 / 투명성의 관점 yieldDeferreds사방; 종종 추상화를하기가 어렵다. 맨손 Deferred으로뿐만 아니라 더 끔찍한 쓸모없는 스택 추적 @inlineCallbacks.
  • Twisted의 모든 내장 기능은를 포함하여 (이에 국한되지는 않음) 꿈꿔 왔던 것입니다 IReactorProcess.spawnProcess.

저는 개인적으로에 의해 꼬인 12.3과 함께 Gevent 1.0rc2를 사용하고 geventreactor있습니다. 나는 아직 독자적으로 게시되지 않은 추가 및 개선 사항을 구현하여 원래 GitHub 저장소의 geventreactor일부로 곧 게시 할 예정 geventreactor입니다 : https://github.com/jyio/geventreactor .

내 현재의 레이아웃은 이러한 비 블로킹으로 좋은 Gevent의 프로그래밍 모델 및 활용하는 일에 프로그램에 나를 수 socket, urllib2및 기타 모듈. 학습 곡선과는 달리 단순하고 기본적인 일을 꼬이는 방식과는 달리 규칙적인 일을하기 위해 일반적인 파이썬 코드를 사용할 수 있습니다. 또한 일반적으로 Twisted에서 문제가 있거나 스레드를 사용해야하는 대부분의 타사 라이브러리를 쉽게 사용할 수 있습니다.

또한 그린 렛을 사용하여 ( Deferreds 및 콜백 대신 및 / 또는 @inlineCallbacks) 어색하고 종종 지나치게 복잡한 콜백 기반 프로그래밍을 완전히 피할 수 있습니다 .

(이 답변은 실제 프로젝트에서 Twisted와 Gevent를 모두 사용한 개인적인 경험을 바탕으로 작성되었으며 Twisted를 사용한 경험이 훨씬 많았습니다 (그러나 Twisted 전문가라고 주장하지는 않습니다). ‘Twisted’의 기능을 너무 많이 사용할 필요가 없었으므로 Twisted에 필요한 기능 세트에 따라 Gevent와 Twisted를 혼합하는 (상대적으로 고통스럽지 않은) 추가 복잡성이 문제가되지 않을 수 있습니다.


답변