Sto eseguendo un'applicazione Flask su Heroku usando gunicorn con gli operatori di eventlet. Un percorso particolare sulla mia app riceve spesso dati POST (x-www-form-urlencoded) con alcuni campi piuttosto pesanti - dell'ordine di 500 KB al massimo.Flask on Heroku: request.form è incredibilmente lento con grandi dati POST?
Questo funziona bene quando funziona a livello locale, ma su Heroku, chiede a quel percorso impiega da 5 a 30 secondi per completare - e quasi il 100% del tempo viene speso nel primo accesso al Request.Form:
t = time.time()
action = str(request.form['action'])
dt = time.time() - t # Often 10 seconds or more!
Ciò è confermato anche dalla traccia di richiesta lenta Newrelic. Ci sono alcuni millisecondi qui o là per le operazioni del database, e quindi un'enorme quantità di tempo nel codice Python, apparentemente trascorsa in attesa su qualche I/O, poiché il tempo di CPU segnalato è in genere inferiore a un millisecondo.
Sono stato completamente incapace di riprodurre questo in un ambiente locale utilizzando la stessa configurazione gunicorn/eventlet che sto usando in produzione. Anche il server WSGI di debug integrato è velocissimo su queste richieste.
Qualcuno ha idea di cosa potrebbe andare storto? E 'un problema con Flask, o qualcosa su cui ho solo bisogno di contattare il supporto di Heroku?
Hai provato a mettere l'app sulla sandbox gratuita di dotcloud? L'ho usato per una piccola app Flask di recente, ed è stato semplice. Forse testare la tua app lì o in qualche luogo simile per vedere se è possibile isolare il problema con Heroku o con Flask o la tua app? –
I second @AllanAnderson - prova una configurazione simile su un altro fornitore - se si interrompe allo stesso modo potresti fornire alcuni dati di esempio che causano il problema? –
* "e quasi il 100% del tempo è trascorso nel primo accesso a request.form" * È possibile che tu stia sperimentando gli effetti del dyno idling? https://devcenter.heroku.com/articles/dynos#dyno-idling – Dominic