programing

Plask app.run()만을 스탠드아론으로 사용하여 여러 클라이언트를 지원할 수 있습니까?

sourcetip 2022. 9. 12. 12:06
반응형

Plask app.run()만을 스탠드아론으로 사용하여 여러 클라이언트를 지원할 수 있습니까?

Flask를 Apache나 다른 웹 서버와 연결할 수 있습니다.하지만 저는 Flask를 여러 클라이언트에 동시에 서비스를 제공하는 독립 실행형 서버로 운영하려고 합니다.

이게 가능합니까?여러 스레드를 산란하여 관리해야 합니까?

flask.Flask.run 는 추가 키워드 인수를 받아들입니다(**options전송처: 이 인수들 중2개는threaded(부울) 및processes(이 값을 1보다 큰 값으로 설정하면 werkzeug가 요구를 처리하는 여러 프로세스를 생성할 수 있습니다).

threaded디폴트로 하다True따라서 최신 버전의 Flask에서는 기본 개발 서버가 여러 클라이언트를 동시에 처리할 수 있습니다.이전 버전의 플라스크의 경우 명시적으로 합격할 수 있습니다.threaded=True이 동작을 유효하게 합니다.

예를 들어 다음과 같이 할 수 있습니다.

if __name__ == '__main__':
    app.run(threaded=True)

오래된 Flask 버전과 호환되는 방식으로 스레드를 사용하여 여러 클라이언트를 처리합니다.

if __name__ == '__main__':
    app.run(threaded=False, processes=3)

Werkzeug에게 수신 요청을 처리하기 위한 세 가지 프로세스를 생성하도록 지시하거나

if __name__ == '__main__':
    app.run()

Flask 1.0 이상을 사용할 것을 알고 있는 경우 스레드를 사용하여 여러 클라이언트를 처리합니다.

말하자면, Werkzeuk's는serving.run_simple표준 라이브러리의 패키지를 래핑합니다.이 패키지에는 실제 가동 가능한 웹 서버가 아닌 WSGI의 참조 구현이 포함되어 있습니다.Plask를 실제 가동에서 사용하는 경우(동시 사용자가 10명 이하인 트래픽의 저부하 내부 어플리케이션이 아니라고 가정할 경우), 실제 웹 서버 뒤에 Flask를 설치해야 합니다(일부 권장 방법은 Flask 문서의 "Deployment Options" 섹션을 참조하십시오).

심플한 사용app.run()from Flask는 한 번에 하나의 클라이언트만 처리할 수 있는 단일 스레드에 단일 동기 서버를 만듭니다.이러한 이유로 수요가 적은 제어 환경(개발, 디버깅)에서 사용하기 위한 것입니다.

Python GIL 때문에 스레드를 직접 만들고 관리하는 것 또한 그리 큰 성과를 거두지 못할 것입니다.

하지만 아직 좋은 선택지가 몇 가지세요.Gunicorn은 견고하고 사용하기 쉬운 WSGI 서버입니다.여러 워커를 생성할 수 있습니다(개별 프로세스이므로 GIL은 걱정하지 않습니다).또한 비동기 워커가 포함되어 있기 때문에 어플리케이션의 처리속도가 향상됩니다(특히 Flask를 사용하는 경우).

그럼에도 불구하고, 귀니콘조차 공개적으로 노출되어서는 안 될 것이다.프로덕션에서는 보다 견고한 HTTP 서버 뒤에 사용해야 합니다.nginx는 Gunicorn 및 Flask와 잘 어울리는 경향이 있습니다.

2020년부터의 힌트:

Flask 1.0부터는 기본적으로 여러 스레드(소스)를 사용할 수 있습니다. 아무것도 할 필요가 없습니다.다음으로 업그레이드만 하면 됩니다.

$ pip install -U flask

「 」를 사용하고 flask runapp.run() 「」 「」 「」 「」)을하여, 을 제어할 수 있습니다.--with-threads/--without-threads

$ flask run --with-threads

와 같다app.run(threaded=True)

언급URL : https://stackoverflow.com/questions/14814201/can-i-serve-multiple-clients-using-just-flask-app-run-as-standalone

반응형