sourcecode

단일 플라스크 프로세스가 수신하는 동시 요청 수는 얼마나 됩니까?

codebag 2023. 6. 17. 09:05
반응형

단일 플라스크 프로세스가 수신하는 동시 요청 수는 얼마나 됩니까?

저는 플라스크로 앱을 만들고 있지만 WSGI에 대해 잘 모르고 HTTP 기반 Werkzeug입니다.내가 gunicorn과 4개의 worker process로 Flask 애플리케이션을 서비스하기 시작하면, 4개의 동시 요청을 처리할 수 있다는 것을 의미합니까?

동시 요청을 의미하는 것이지 초당 요청 또는 다른 요청을 의미하는 것은 아닙니다.

서버를 때 - 을 수 있는 - 을 실행하면 얻을 수 있습니다.app.run()단일 동기화 프로세스를 사용할 수 있습니다. 즉, 한 번에 최대 1개의 요청이 처리됩니다.

기본구서에을성 Gunicorn의 으로써.--workers이 얻는 신이얻것본은질각행많입프동은로스세다는 (Gunicorn 의관리됨해에니각럼처하당로으는적gun입▁what▁the▁(ic))처럼 하는 (되는) 과정들입니다.app.run(). 의 작업자 의 동시 4명의 작업자 == 4개의 동시 요청.된 구니콘을 입니다.sync기본적으로 worker 유형입니다.

중요한 것은 Gunicorn에도 비동기식 근로자가 포함되어 있다는 것입니다. 즉,eventlet그리고.gevent (으)로 표시)tornado토네이도 프레임워크에 가장 잘 사용됩니다.). 중 를 이한비중하지나로 --worker-class플래그, 당신이 얻을 수 있는 것은 Gunicorn이 여러 비동기 프로세스를 관리하는 것이며, 각 프로세스는 자체적으로 동시성을 관리합니다.이러한 프로세스는 스레드를 사용하지 않고 코루틴을 사용합니다.기본적으로 각 프로세스 내에서 한 번에 한 가지 작업(스레드 1개)만 수행할 수 있지만, 외부 프로세스가 완료될 때(데이터베이스 쿼리 또는 네트워크 I/O 대기) 개체를 '일시 중지'할 수 있습니다.

즉, Gunicorn의 비동기 작업자 중 하나를 사용하는 경우 각 작업자는 한 번에 하나 이상의 요청을 처리할 수 있습니다.작업자 수는 앱의 특성, 환경, 실행되는 하드웨어 등에 따라 달라집니다.자세한 내용은 Gunicorn의 디자인 페이지와 소개 페이지에서 gevent가 어떻게 작동하는지에 대한 참고 사항을 확인할 수 있습니다.

현재 이미 제공된 솔루션보다 훨씬 간단한 솔루션이 있습니다.응용프로그램을 실행할 때는 다음을 수행하기만 하면 됩니다.threaded=True 매개변에 대한 app.run() 출예, 호:

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

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

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

다음과 같은 것:

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

에 자세한 run()여기에 있는 방법과 솔루션 및 API 참조를 찾도록 이끈 블로그 게시물.


참고: 의 플라스크 문서에서run()방법 운영 환경에서 사용하는 것이 권장되지 않는 이유는 다음과 같습니다(인용문)."플라스크의 내장 서버는 가볍고 사용하기 쉽지만, 확장성이 좋지 않아 생산에 적합하지 않습니다."

그러나 운영 환경으로 전환할 때 권장되는 방법은 배포 옵션 페이지를 참조하십시오.

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

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

아뇨, 그 이상은 확실히 감당할 수 있어요

실제로 단일 코어 시스템을 실행한다고 가정할 때 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

반응형