Twitter Let's start Qiita to commemorate the reincarnation.
~~ As the title says, when Flask is run with uWSGI @ HTTP, I have confirmed that there is a beautiful delay of 1 second when posting a file, so I will introduce the reproduction procedure. ~~
This is a specification of curl that issues a request with the ʻExpect: 100-continue` header and waits 1 second to ask if you want to post the file to the server. It seems. [^ 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
It is said to be HTTP / 1.1 compliant. [^ 2]
uWSGI supports the handling of ʻExpect: 100-continue`, and it seems that you should add the following line to the ini file. [^ 1]
http-manage-expect = 1
https://github.com/akeyhero/uwsgi-http-is-slow
As per the repository above
I am conducting an experiment on.
simply
$ flask run --host=0.0.0.0
When started with.
uWSGI
http = 0.0.0.0:80
When started with settings that include.
uWSGI
socket = /socket/uwsgi.sock
When started with settings that include.
Flask==1.1.1
uwsgi==2.0.18
The response times when POSTing files using curl are as follows.
Here, as long as it is confirmed, the file can be anything, so I am using the LICENSE file in the repository.
| Response time | |
|---|---|
| 1.Flask alone | 0.067 |
| 2. Flask w/ uWSGI @ HTTP | 1.063 |
| 3. Flask w/ uWSGI @ uwsgi | 0.062 |
You can see that the response time is just one second slower only when Flask is started with uWSGI @ HTTP.
This time, we have posted the data for one trial, but the response time will be almost the same no matter how many times you try.
curl, not Flask or ʻuWSGI`. *~~ Flask alone does not cause this phenomenon, so I threw issue appropriately because uWSGI was probably the cause. However, I'm not sure if it's because of Flask, or if it's caused by a single combination technique. ~~
~~ If you have any details, please let us know. : bow: ~~
I was taught by a contributor of uWSGI. [^ 1] I learned a lot.
Recommended Posts