2016-11-28 11 views
1

는 일반적으로, 그들은 플라스크 일부 비동기 - 도구 원숭이 패치 상황 (GEvent, asyncio 등)만드는 동기 플라스크 비동기 - 사람들이 "비동기"또는 "플라스크 비동기을"에 대해 이야기 할 때 플라스크 인스턴스

참조 플라스크가 충분히 작은 "즉석에서 만든"할 것을 고려

, 나는이 모델이 작동 할 수 있다고 생각 :

들어오는 HTTP 요청을 -> HTTP 서버 (. 예를 들면 nginx를/아파치) -> HTTP- request-queue -> Flask 인스턴스 (각 요청을 처리하기 위해)

코드를 수정하지 않고 원숭이 패치를 수행하면 본질적으로 차단 코드가 분리되어 처리됩니다. 일부 파고 후, 나는 그것을 할 수 있다고 생각 :

http://flask.pocoo.org/docs/0.11/deploying/wsgi-standalone/#twisted-web][1]

내 질문

은 다음과 같습니다

  1. 이벤트 중심의 코드를 작성하는 것보다 덜 효율적이 방법을 사용? (예 : GEvent 또는 Tornado 사용)

  2. [1]이 요청을 처리하는 방식은 무엇입니까? (위에서 설명한 것과 같습니다)

  3. 경쟁 조건이 존재할 수 있습니까? 예 : 제 HTTP 요청에 대한 충돌을 유발 마지막 HTTP 요청 (요청-2) (인해 비동기 요청 처리) 먼저 처리하는 데이터베이스 (2) 호출을

    (요청-1)

답변

1
  1. "이 방법을"가정하면 동기 플라스크와 wisgi 서버를 사용하는 의미는, 효율이 앱이 무엇을하는지에 따라 달라집니다. 상대적으로 작은 응용 프로그램이고 너무 오래 실행되는 작업이 필요하지 않은 경우 Gunicron + Flask와 같은 기능이 훌륭한 솔루션입니다. 반면에 앱에 외부 사이트에 많은 요청을 보내거나 샐러리 태스크가 결과를 반환하기를 기다리는 등의 장기 실행 태스크가있는 경우 이벤트 중심 접근 + 프록시 /로드 밸런서를 권합니다. 예측할 수없는 지연 시간을 갖는 것은 일반적으로 비동기를 사용하여 더 잘 처리됩니다.

  2. 설명하신 내용과 거의 같습니다.

  3. 물론 그것은 일어날 수 있습니다 :) 그것은 웹 개발을 매우 흥미롭게 만듭니다. 개발자는 이러한 조건이 최소한으로 유지되도록 매우 조심스럽게 설계해야합니다.

내 개인적인 취향은 HTTP 서버 및로드 밸런서 + 토네이도/트위스트 조합으로 Nginx입니다. 이 설정은 동기식 또는 비동기식 디자인을 사용하려는 경우 많은 희생없이 최고의 유연성을 제공합니다. Flask 문법을 좋아한다면 Twisted와 Werkzeug를 결합한 klein이라는 매우 훌륭한 프로젝트가 있습니다.