[PYTHON] [Es war eine Spezifikation von Curl & HTTP] Wenn Flask mit uWSGI von HTTP ausgeführt wird, gibt es beim Posten einer Datei eine saubere Verzögerung von 1 Sekunde.

Twitter Beginnen wir mit Qiita, um an die Reinkarnation zu erinnern.

~~ Wie der Titel schon sagt, habe ich beim Ausführen von Flask mit uWSGI @ HTTP bestätigt, dass es beim Posten einer Datei eine schöne Verzögerung von 1 Sekunde gibt, daher werde ich das Reproduktionsverfahren einführen. ~~

Dies ist eine Spezifikation von "curl", die eine Anfrage mit einem "Expect: 100-continue" -Header ausgibt und 1 Sekunde wartet, um zu fragen, ob Sie die Datei auf dem Server veröffentlichen möchten. Es scheint, dass. [^ 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

Es soll HTTP / 1.1-konform sein. [^ 2]

uWSGI unterstützt die Behandlung von Expect: 100-continue, und es scheint, dass Sie der INI-Datei die folgende Zeile hinzufügen sollten. [^ 1]

http-manage-expect = 1

Experimentelle Einstellungen

https://github.com/akeyhero/uwsgi-http-is-slow

Gemäß dem obigen Repository

  1. Wenn der Kolben unabhängig gestartet wird
  2. Wenn Flask über uWSGI mit HTTP-Einstellungen gestartet wird
  3. Wenn Flask über uWSGI in der uwsgi-Protokolleinstellung gestartet wird

Ich führe ein Experiment an.

1. Wenn der Kolben unabhängig gestartet wird

einfach

$ flask run --host=0.0.0.0

Wenn mit begonnen.

2. Wenn Flask über uWSGI mit HTTP-Einstellungen gestartet wird

uWSGI

http = 0.0.0.0:80

Beim Start mit Einstellungen, die enthalten.

3. Wenn Flask über uWSGI in der uwsgi-Protokolleinstellung gestartet wird

uWSGI

socket = /socket/uwsgi.sock

Beim Start mit Einstellungen, die enthalten.

Ausführung

Flask==1.1.1
uwsgi==2.0.18

Versuchsergebnis

Die Antwortzeiten beim POSTEN einer Datei mit "curl" sind wie folgt. Solange dies bestätigt ist, kann die Datei beliebig sein, daher verwende ich die LIZENZ-Datei aus dem Repository.

Reaktionszeit
1.Flasche allein 0.067
2. Flask w/ uWSGI @ HTTP 1.063
3. Flask w/ uWSGI @ uwsgi 0.062

Sie können sehen, dass die Antwortzeit nur eine Sekunde langsamer ist, wenn Flask mit uWSGI @ HTTP gestartet wird.

Dieses Mal haben wir die Daten für einen Versuch veröffentlicht, aber die Antwortzeit ist fast gleich, egal wie oft Sie es versuchen.

abschließend

~~ Flask allein verursacht dieses Phänomen nicht, daher habe ich ein entsprechendes Problem geworfen, da uWSGI wahrscheinlich die Ursache war. Ich bin mir jedoch nicht sicher, ob es an Flask liegt oder ob es durch eine einzelne Kombinationstechnik verursacht wird. ~~

~~ Wenn Sie Details haben, lassen Sie es uns bitte wissen. : bow: ~~

Ich wurde von einem Mitarbeiter von uWSGI unterrichtet. [^ 1] Ich habe viel gelernt.

Recommended Posts

[Es war eine Spezifikation von Curl & HTTP] Wenn Flask mit uWSGI von HTTP ausgeführt wird, gibt es beim Posten einer Datei eine saubere Verzögerung von 1 Sekunde.
Mit der Docker-Version der Nginx-Einheit war es ein wenig schwierig, eine Flasche zu machen
[Shell Art] Nur wenn es ein Vielfaches von 3 ist und eine Zahl mit 3 dumm wird