Flasche auf Heroku: request.form ist bei großen POST-Daten unglaublich langsam?

Ich starte eine Flask-App auf Heroku mit Gunicorn und Eventlet-Mitarbeitern. Eine bestimmte Route in meiner App empfängt häufig POST-Daten (x-www-form-urlencoded) mit einigen ziemlich großen Feldern - in der Größenordnung von höchstens 500 KB.

Bei lokaler Ausführung funktioniert dies einwandfrei, aber bei Heroku dauert die Ausführung von Anfragen für diese Route zwischen 5 und 30 Sekunden - und fast 100% der Zeit wird für den ersten Zugriff auf request.form aufgewendet:

t = time.time()
action = str(request.form['action'])
dt = time.time() - t  # Often 10 seconds or more!

Dies wird auch durch das langsame Anforderungs-Tracing von Newrelic bestätigt. Hier und da sind ein paar Millisekunden für die Datenbankoperationen und dann ein großer Teil der Zeit im Python-Code, der anscheinend für einige I / O-Vorgänge aufgewendet wurde, da die gemeldete CPU-Zeit normalerweise weniger als eine Millisekunde beträgt.

Es war mir völlig unmöglich, dies in einer lokalen Umgebung mit dem gleichen Gunicorn / Eventlet-Setup zu reproduzieren, das ich in der Produktion verwende. Sogar der integrierte WSGI-Debug-Server reagiert auf diese Anforderungen blitzschnell.

Hat jemand eine Ahnung, was schief gehen könnte? Ist es ein Problem mit Flask oder etwas, über das ich mich nur an den Heroku-Support wenden muss?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage