토네이도 사용 시기, 트위스트 / 사이클론 / GEVENT / 기타
이러한 프레임워크/라이브러리 중 현대적인 다중 사용자 웹 애플리케이션을 구축하는 데 가장 적합한 것은 무엇입니까?쉽게 확장할 수 있는 비동기식 웹 서버를 갖고 싶습니다.사용 편의성과 개발 편의성 측면에서 최고의 성능/확장성/가장 유용한 프레임워크를 제공하는 솔루션은 무엇입니까?
좋은 기능(웹소켓, rpc, 스트리밍 등)을 제공하면 좋겠습니다.
각 솔루션의 장단점은 무엇입니까?
"장고는 빠른 개발과 깨끗하고 실용적인 디자인을 장려하는 고급 파이썬 웹 프레임워크입니다."만약 당신이 전자 상거래 사이트와 비슷한 것을 만들고 있다면, 당신은 아마도 장고와 함께 가야 할 것입니다.그것은 당신의 일을 빨리 끝낼 것입니다.너무 많은 기술 선택에 대해 걱정할 필요가 없습니다.템플릿 엔진에서 ORM에 이르기까지 필요한 모든 것을 제공합니다.당신의 앱을 구성하는 방식에 대해 약간의 의견이 있을 것입니다. 제게 묻는다면 좋은 일입니다.그리고 다른 모든 도서관들 중에서 가장 강력한 공동체를 가지고 있습니다. 이것은 쉬운 도움이 가능하다는 것을 의미합니다.
"Flask는 Werkzeug, Jinja 2 및 좋은 의도에 기반한 Python용 마이크로 프레임워크입니다."주의 - "마이크로프레임워크"는 오해의 소지가 있습니다.이것은 플라스크가 설익은 도서관이라는 것을 의미하지 않습니다.이것은 플라스크의 핵심이 매우 단순하다는 것을 의미합니다.장고와 달리 기술에 대한 결정은 내리지 않습니다.원하는 템플릿 엔진 또는 ORM을 자유롭게 선택할 수 있습니다.기본적으로 Jinja 템플릿 엔진이 제공되지만, 당신은 언제든지 우리의 것을 선택할 수 있습니다.플라스크는 API 끝점(RESTful services) 작성에 유용한 것으로 알고 있습니다.
"Twisted는 파이썬으로 작성된 이벤트 구동 네트워킹 엔진입니다."이것은 고성능 엔진입니다.그것의 속도의 주된 이유는 지연이라고 불리는 것입니다.트위스트는 지연 위에 구축됩니다.지연에 대해 모르는 분들은 비동기식 아키텍처를 통해 달성되는 메커니즘입니다.꼬임은 매우 빠릅니다.그러나 기존의 웹 앱을 작성하는 데는 적합하지 않습니다.만약 당신이 낮은 수준의 네트워킹을 하고 싶다면, 뒤틀리는 것은 당신의 친구입니다.
"Tornado는 원래 FriendFeed에서 개발된 Python 웹 프레임워크 및 비동기 네트워킹 라이브러리입니다. 비차단 네트워크 I/O를 사용함으로써 Tornado는 수만 개의 개방형 연결로 확장할 수 있으므로 각 사용자에 대한 장기적인 연결이 필요한 긴 폴링, WebSocket 및 기타 애플리케이션에 이상적입니다."토네이도는 장고와 플라스크 사이 어딘가에 있습니다.장고나 플라스크로 무언가를 쓰고 싶지만 더 나은 성능이 필요하다면 토네이도를 선택할 수 있습니다.올바르게 설계되면 C10k 문제를 매우 잘 처리할 수 있습니다.
"Cyclone은 Tornado API를 Twisted protocol로 구현하는 Python용 웹 서버 프레임워크입니다."Twisted만큼 성능이 뛰어나지만 기존의 웹 앱을 쉽게 작성할 수 있는 것을 원한다면 어떨까요?싸이클론에게 안부 전해 주세요.나는 토네이도보다 사이클론을 더 선호합니다.그것은 Tornado와 매우 유사한 API를 가지고 있습니다.사실, 이것은 토네이도의 분기점입니다.하지만 문제는 그곳이 상대적으로 작은 공동체를 가지고 있다는 것입니다.알렉상드르 피오리는 레포의 유일한 주요 커미셔너입니다.
"Pyramid는 일반적인 오픈 소스 Python 웹 애플리케이션 개발 프레임워크입니다. 주요 목표는 파이썬 개발자가 웹 애플리케이션을 더 쉽게 만들 수 있도록 하는 것입니다."저는 피라미드를 사용해 본 적은 없지만, 문서를 검토했습니다.제가 알기로는 피라미드는 플라스크와 매우 유사하며 플라스크가 적합한 곳이라면 어디든 피라미드를 사용할 수 있다고 생각합니다.
편집: 다른 프레임워크에 대한 검토 요청을 환영합니다!
출처: http://dhilipsiva.com/2013/05/19/python-libraries-django-twisted-tornado-flask-cyclone-and-pyramid.html
이것은 분명히 다소 편향된 답변이지만, 잘못된 답변과 같은 것은 아닙니다. 항상 트위스트를 사용해야 합니다.이전에도 비슷한 질문에 답했지만 질문 내용이 완전히 같지 않기 때문에 다음과 같은 몇 가지 이유가 있습니다.
"최고의 성능"
Twisted는 speed.twistedmatrix.com 웹사이트에서 우리의 성과를 지속적으로 모니터링합니다.또한 PyPy의 유사 사이트에서 모니터링한 최초의 프로젝트 중 하나로, Python의 고성능 애플리케이션과 관련된 모든 사용자가 런타임에서 Twisted의 우수한 성능을 보장했습니다.
"확장성"
제가 알기로는 나열된 프레임워크 중 자동 확장을 지원하는 기본 제공 프레임워크는 없습니다. 모두 통신 프레임워크이므로 확장 노드 간에 통신하는 작업을 수행해야 합니다.그러나 Twisted는 로컬 멀티 프로세싱을 기본으로 지원한다는 장점이 있습니다.공정하게 말하자면, Tornado에도 동일한 작업을 수행할 수 있는 타사 추가 기능이 있습니다.최근 릴리스에서 Twisted는 코어 간에 작업을 공유할 수 있는 방법을 늘리는 기능을 추가했으며 해당 영역에서 작업이 진행 중입니다.Twisted는 또한 몇 가지 "기본" RPC 프로토콜을 잘 통합하여 사용자가 추구하고자 하는 확장성 관용구를 위한 구성 키트를 제공합니다.
"가장 유용한"
많은 사람들이 트위스트가 매우 유용하다고 생각하는 것 같습니다.그들 중 많은 사람들이 그것을 확장하고 그들의 확장을 당신이 사용할 수 있도록 만들었습니다.
"기능"
기본 제공되는 트위스트에는 다음이 포함됩니다.
- 다음과 같은 모든 것의 시험적 개발에 대한 좋은 지원.
- TCP 서버, 클라이언트, 전송 계층 보안
- SSH 클라이언트 및 서버
- IMAP4, ESMTP, POP3 클라이언트 및 서버
- DNS 클라이언트 및 서버
- HTTP 클라이언트 및 서버
- IRC, XMPP, OSCAR, MSN 클라이언트 및 서버
적어도 이 마지막 부서에서 Twisted는 내장 기능에 있어 확실한 승자로 보입니다.그리고 이 모든 것을, 2메가바이트가 조금 넘는 패키지로!
저는 @Glyph 반응을 좋아합니다.트위스트는 매우 포괄적이고 풍부한 파이썬 프레임워크입니다.트위스트와 토네이도의 디자인은 매우 유사합니다.그리고 저는 이 디자인이 매우 마음에 듭니다.
- 빠릅니다
- 이해하기 쉬운
- 확장하기 쉬운
- C-확장이 필요하지 않습니다.
- PyPy에서 작동합니다.
하지만 저는 제가 선호하고 최근에 인기를 얻고 있는 토네이도를 강조하고 싶습니다.Twisted와 마찬가지로 Twisted는 콜백 스타일 프로그래밍을 사용하지만 다음을 사용하여 인라인화할 수 있습니다.tornado.gen.engine
(twisted.internet.inlineCallbacks
트위스트)로
코드베이스
최고의 댓글은 http://cyclone.io 사이트에서 온 것입니다.사이클론이 트위스트와 토네이도를 혼합하려고 하는 이유는 다음과 같습니다.
Twisted는 일반인이 사용할 수 있는 가장 성숙한 비차단 I/O 라이브러리 중 하나입니다.Tornado는 Python용으로 가장 인기 있고 빠른 웹 서버 중 하나인 FriendFeed의 웹 서버의 오픈 소스 버전이며 웹 애플리케이션을 구축하기 위한 매우 괜찮은 API를 갖추고 있습니다.
이 아이디어는 Tornado의 우아하고 간단한 API를 Twisted's Event-Loop에 연결하여 지원되는 수많은 프로토콜을 가능하게 하는 것입니다.
하지만 2011년에tornado.platform.twisted
유사한 기능을 제공합니다.
성능
토네이도는 훨씬 더 나은 성능을 가지고 있습니다.또한 PyPy와 원활하게 작동하여 큰 이점을 얻을 수 있습니다.
확장성
트위스트와 같은.에는 토이도는이 있습니다.tornado.process
그리고 그 위에 구현된 많은 rpc 서비스.
기능성
Twisted's 148개와 Gevent's 48개에 비해 Twisted 기반 패키지가 있습니다.그러나 패키지 업로드 시간의 중앙값을 자세히 계산하면 트위스트가 가장 오래된 것, 게벤트와 토네이도가 가장 신선한 것을 알 수 있습니다.더 나아가서는.tornado.platform.twisted
Twisted on Tornado에 대해 작성된 코드를 실행할 수 있는 모듈.
요약
토네이도와 함께 트위스트의 코드를 사용할 수 있습니다.코드를 비틀기만 하는 사이클론을 사용할 필요는 없습니다(코드가 더 지저분해집니다).
2014년 기준으로 Tornado는 python2와 python3 모두에서 작동하는 널리 받아들여지는 기본 비동기 프레임워크로 간주됩니다.또한 최신 버전 4.x는 https://docs.python.org/dev/library/asyncio.html 에서 많은 기능을 제공합니다.
저는 Tornado 기능에 대해 훨씬 더 많이 쓴 최고의 Python 웹 프레임워크인 Tornado를 고려하는 이유를 설명하는 기사를 썼습니다.
(업데이트:여기서 Gevent를 추천하거나 언급하는 답변이 거의 없다는 것에 유감스럽게도 놀랐습니다. 이 훌륭한 라이브러리의 인기, 성능 및 사용 편의성과 비례하지 않는다고 생각합니다!)
Gevent와 Twisted는 처음에는 반대로 보일 수 있지만 서로 배타적이지 않습니다.가 있습니다.geventreactor
이를 통해 다음과 같은 두 세계의 장점을 비교적 원활하게 활용할 수 있습니다.
- Gevent의 효율적이고 저렴한(협력 녹색) 스레드 모델은 동시성과 관련하여 프로그래밍하기가 훨씬 쉽습니다. 트위스트의.
inlineCallbacks
입니다.yield
그리고.Deferreds
어디서나; 종종 추상화를 구축하기가 어렵다; 양쪽 모두 맨몸으로 끔찍하게 쓸모없는 스택 흔적.Deferred
뿐만 아니라, 그리고 훨씬 더 그렇습니다.@inlineCallbacks
. - Twisted의 모든 내장 기능은 다음을 포함하지만 이에 국한되지 않습니다.
IReactorProcess.spawnProcess
.
저는 개인적으로 현재 Gevent 1.0rc2와 Twisted 12.3이 브리지된 Gevent 1.0rc2를 사용하고 있습니다.geventreactor
아직 공개되지 않은 추가 기능과 향상된 기능을 구현했습니다.geventreactor
바라건대, 제가 곧 출판할 것입니다.geventreactor
의 원래 GitHub 저장소: https://github.com/jyio/geventreactor .
현재 레이아웃을 사용하면 Gevent의 멋진 프로그래밍 모델로 프로그래밍할 수 있으며, 비차단과 같은 것을 활용할 수 있습니다.socket
,urllib2
기타 모듈.저는 학습 곡선과 단순하고 기본적인 것조차 트위스트 방식으로 하는 불편함과 반대로 규칙적인 일을 할 때 일반적인 파이썬 코드를 사용할 수 있습니다.또한 일반적으로 Twisted에서는 문제가 되지 않거나 스레드를 사용해야 하는 대부분의 타사 라이브러리를 쉽게 사용할 수 있습니다.
는 또한 그린렛 수 .Deferred
콜백 "" "/"@inlineCallbacks
).
(이 답변은 Twisted와 Gevent를 실제 프로젝트에서 모두 사용한 개인적인 경험을 바탕으로 작성되었으며 Twisted를 사용한 경험이 훨씬 더 많습니다(Twisted 전문가라고 주장하지는 않습니다).제가 작성해야 하는 소프트웨어는 트위스트의 기능을 너무 많이 사용할 필요가 없었기 때문에 트위스트의 기능 세트에 따라 게벤트와 트위스트를 혼합하는 추가 복잡성은 문제를 일으킬 가치가 없을 수도 있습니다.)
언급URL : https://stackoverflow.com/questions/13941903/when-to-use-tornado-when-to-use-twisted-cyclone-gevent-other
'programing' 카테고리의 다른 글
이클립스의 SSE 핵심 작업 스케줄러 시작 문제 (0) | 2023.06.21 |
---|---|
SQL Server 2008 R2에서 원격 프로시저 호출 실패 (0) | 2023.06.21 |
Spring 5 Reactive에서의 HTTP 응답 예외 처리 (0) | 2023.06.21 |
이 두 개의 고차 함수 정의 사이에 차이점이 있습니까? (0) | 2023.06.21 |
두 절대 경로를 비교하여 상대 경로 가져오기 (0) | 2023.06.21 |