[curl & HTTP 사양] Flask with uWSGI를 HTTP로 이동하면 파일 게시 시 깨끗하게 1초 지연됩니다.

4931 단어 파이썬uwsgiFlask
Twitter 환생한 기념에 Qiita 시작해 보겠습니다.

타이틀 대로입니다만, Flask 를 uWSGI @ HTTP 로 움직이면(자), 파일 투고시에 깨끗이 1 초 지연하는 현상을 확인했으므로, 재현 순서를 소개합니다.

이것은 curl 의 사양으로 Expect: 100-continue 헤더를 붙여 리퀘스트를 발행하게 되어 있어, 서버에 파일을 투고해도 괜찮은지 묻는다 1 초 기다리는 것 같습니다. 1
$ curl -v -s -XPOST -F file=@LICENSE localhost:5002
* Rebuilt URL to: localhost:5002/
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 5002 (#0)
> POST / HTTP/1.1
> Host: localhost:5002
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Length: 1271
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=------------------------ebc5516179fb0a6c
>
* Done waiting for 100-continue
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=utf-8
< Content-Length: 20
<
* Connection #0 to host localhost left intact
Took: 0:00:01.011157

이것은 HTTP/1.1에 준거한 것입니다. 2

uWSGI 는 Expect: 100-continue 의 핸들링에 대응하고 있어 ini 파일에 이하의 행을 추가하면 좋다고 합니다. 1
http-manage-expect = 1

실험 설정



상기 리포지토리와 같이,
  • Flask를 단독으로 시작한 경우
  • Flask가 HTTP 구성의 uWSGI를 통해 시작된 경우
  • Flask가 uwsgi 프로토콜 설정의 uWSGI를 통해 시작된 경우

  • 에 관해서 실험을 실시하고 있습니다.

    1. Flask를 단독으로 시작한 경우



    단순히
    $ flask run --host=0.0.0.0
    

    에서 시작한 경우입니다.

    2. Flask가 HTTP 설정 uWSGI를 통해 시작된 경우



    uWSGI
    http = 0.0.0.0:80
    

    를 포함한 설정으로 시작한 경우입니다.

    3. Flask가 uwsgi 프로토콜 설정의 uWSGI를 통해 시작된 경우



    uWSGI
    socket = /socket/uwsgi.sock
    

    를 포함한 설정으로 시작한 경우입니다.

    버전


    Flask==1.1.1
    uwsgi==2.0.18
    

    실험 결과



    각각 curl 를 사용하여 파일을 POST할 때 응답 시간은 다음과 같습니다.
    여기서 확인된 한 파일은 무엇이든 좋기 때문에 리포지토리의 LICENSE 파일을 사용하고 있습니다.



    응답 시간


    1. Flask 단독
    0.067

    2. Flask w/uWSGI@HTTP
    1.063

    3. Flask w/uWSGI@uwsgi
    0.062


    Flask가 uWSGI @ HTTP로 시작된 경우에만 응답 시간이 1초 늦어진 것을 알 수 있습니다.

    이번은 시행 횟수 한 번의 데이터를 게재하고 있습니다만, 몇 번 해도 대체로 이 리스폰스 타임이 됩니다.

    ※ 서두에서 설명한 대로, 여기서 1초 기다리고 있는 주체는 curl 이며, Flask 이나 uWSGI 가 아닙니다.

    결론



    Flask 혼자라면 이 현상은 발생하지 않기 때문에 아마 uWSGI가 원인이 아닌가 하는 것으로 적당히 issue 의지도 모르고 잘 모르겠습니다.

    자세한 쪽이 계시시면 꼭 교시해 주세요.

    uWSGI의 기여자에게 가르쳤습니다. 1
    매우 공부가 되었습니다.



    htps : // 기주 b. 코 m / 똥 t / uws 기 / 이스에 s / 2129 # 이스에 코멘 t-592935917 

    htps // gms. tf/우-쿠 rl-센 ds-100-안녕하세요. HTML 

    좋은 웹페이지 즐겨찾기