Programming

단일 Flask 프로세스가 수신하는 동시 요청 수는 얼마입니까?

procodes 2020. 8. 9. 10:38
반응형

단일 Flask 프로세스가 수신하는 동시 요청 수는 얼마입니까?


Flask로 앱을 만들고 있지만 WSGI에 대해 잘 모르고 HTTP 기반 인 Werkzeug입니다. gunicorn 및 4 개의 작업자 프로세스로 Flask 애플리케이션을 제공하기 시작하면 4 개의 동시 요청을 처리 할 수 ​​있다는 의미입니까?

나는 동시 요청을 의미하며 초당 요청 또는 다른 것을 의미하지 않습니다.


실행중인 개발 서버를 실행할 때 app.run()단일 동기 프로세스를 얻습니다. 즉, 한 번에 최대 1 개의 요청이 처리됨을 의미합니다.

기본 구성에서 Gunicorn을 앞에 붙이고 단순히 수를 늘리면 --workers기본적으로 각각 app.run()개발 서버 처럼 작동하는 여러 프로세스 (Gunicorn에서 관리)가 생성됩니다 . 4 명의 작업자 == 4 개의 동시 요청. Gunicorn은 sync기본적으로 포함 된 작업자 유형을 사용하기 때문 입니다.

Gunicorn에는 비동기 작업자, 즉 eventletgevent(및 또한 tornado,하지만 Tornado 프레임 워크에서 가장 잘 사용되는 것 같습니다) 도 포함된다는 점에 유의하는 것이 중요합니다 . 이러한 비동기 작업자 중 하나를 --worker-class플래그 로 지정 하면 Gunicorn이 여러 비동기 프로세스 관리하고 프로세스 는 자체 동시성 관리합니다. 이 프로세스는 스레드를 사용하지 않고 대신 코 루틴을 사용합니다. 기본적으로 각 프로세스 내에서 여전히 한 번에 한 가지 일 (스레드 1 개) 만 발생할 수 있지만 외부 프로세스가 완료 될 때까지 대기 할 때 (데이터베이스 쿼리 또는 네트워크 I / O 대기 중) 개체가 '일시 중지'될 수 있습니다.

즉, Gunicorn의 비동기 작업자 중 하나를 사용하는 경우 각 작업자는 한 번에 하나 이상의 요청을 처리 할 수 ​​있습니다. 얼마나 많은 작업자가 가장 적합한지는 앱의 특성, 환경, 실행되는 하드웨어 등에 따라 다릅니다. 자세한 내용은 Gunicorn의 디자인 페이지와 소개 페이지에서 gevent가 작동하는 방식 에 대한 메모에서 찾을 수 있습니다 .


Flask는 스레드 당 하나의 요청을 동시에 처리합니다. 각각 4 개의 스레드가있는 2 개의 프로세스가있는 경우 8 개의 동시 요청입니다.

Flask는 스레드 또는 프로세스를 생성하거나 관리하지 않습니다. 이것이 WSGI 게이트웨이 (예 : gunicorn)의 책임입니다.


현재 이미 제공된 것보다 훨씬 간단한 솔루션이 있습니다. 애플리케이션을 실행할 때 다음과 같이 threaded=True매개 변수를 app.run()호출 에 전달하기 만하면됩니다 .

app.run(host="your.host", port=4321, threaded=True)

werkzeug 문서 에서 볼 수있는 또 다른 옵션은 processes처리 할 최대 동시 프로세스 수를 나타내는 1보다 큰 숫자를받는 매개 변수 를 사용하는 것입니다 .

  • threaded – 프로세스가 개별 스레드에서 각 요청을 처리해야합니까?
  • 프로세스 – 1보다 크면 최대 동시 프로세스 수까지 새 프로세스에서 각 요청을 처리합니다.

다음과 같은 것 :

app.run(host="your.host", port=4321, processes=3) #up to 3 processes

여기run()방법 에 대한 자세한 정보 솔루션 및 API 참조를 찾는 데 도움 이 된 블로그 게시물 이 있습니다.


아니-당신은 확실히 그 이상을 처리 할 수 ​​있습니다.

단일 코어 머신을 실행한다고 가정 할 때 CPU는 실제로 한 번에 하나의 명령 * 만 실행한다는 점을 기억하는 것이 중요합니다.

즉, CPU는 매우 제한된 명령 세트 만 실행할 수 있으며, 클럭 틱당 하나 이상의 명령을 실행할 수 없습니다 (많은 명령이 1 틱 이상 소요됨).

따라서 컴퓨터 과학에서 말하는 대부분의 동시성은 소프트웨어 동시성입니다. 다시 말해서, 우리로부터 최하위 수준의 CPU를 추상화하고 동시에 코드를 실행하고 있다고 생각하게 만드는 소프트웨어 구현 계층이 있습니다.

이러한 "사물"은 프로세스 일 수 있으며, 이는 각 프로세스가 자체 비공유 메모리를 사용하여 자체 세계에서 실행된다고 생각한다는 의미에서 동시에 실행되는 코드 단위입니다.

또 다른 예는 동시성을 허용하는 프로세스 내부의 코드 단위 인 스레드입니다.

4 개의 작업자 프로세스가 4 개 이상의 요청을 처리 할 수있는 이유는 점점 더 많은 요청을 처리하기 위해 스레드를 실행하기 때문입니다.

실제 요청 제한은 선택한 HTTP 서버, I / O, OS, 하드웨어, 네트워크 연결 등에 따라 다릅니다.

행운을 빕니다!

* 명령은 CPU가 실행할 수있는 매우 기본적인 명령입니다. 예-두 개의 숫자를 더하고 한 명령어에서 다른 명령어로 이동

참고 URL : https://stackoverflow.com/questions/10938360/how-many-concurrent-requests-does-a-single-flask-process-receive

반응형