L'utilizzo del semplice app.run()
dall'interno di Flask crea un singolo server sincrono su un singolo thread in grado di servire solo un client alla volta. È inteso per l'uso in ambienti controllati con bassa domanda (cioè sviluppo, debug) proprio per questo motivo.
Generare thread e gestirli autonomamente non ti porterà molto lontano, a causa di the Python GIL.
Detto questo, avete ancora delle buone opzioni. Gunicorn è un server WSGI solido e facile da usare che ti consente di generare più lavoratori (processi separati, quindi nessuna preoccupazione GIL) e arriva anche con asynchronous workers che velocizzerà la tua app (e renderla più sicura) con poco nessun lavoro da parte tua (specialmente con Flask).
Tuttavia, anche Gunicorn probabilmente non dovrebbe essere esposto pubblicamente. In produzione, dovrebbe essere utilizzato dietro un server HTTP più robusto; nginx tende ad andare bene con Gunicorn e Flask.
fonte
2013-02-11 16:03:07
Cosa succede se sto guardando un massimo di 100 utenti? Posso semplicemente assegnare 'processes = 100' ed essere felice con esso? Nel mio caso, ho solo bisogno di file statici, non di metodi HTTP Post. Il mio requisito è, voglio eseguire tutti i thread di Flask come parte della mia app genitore, in modo che tutti possano condividere le variabili. – ATOzTOA
* Chuckles * - @ATOzTOA - no, probabilmente sarebbe * abbastanza * controproducente (i processi sono relativamente costosi e, a meno che tu non stia facendo molto lavoro in ogni richiesta, non c'è motivo per cui 4 o 8 processi non dovrebbero essere abbastanza). Detto questo, se si sta visualizzando solo contenuto statico, sarebbe meglio con un server ottimizzato per farlo (Apache, ngnix, IIS). –
Inoltre, non è generalmente necessario condividere le variabili tra le richieste: se * si * è necessario limitarsi a un processo o utilizzare alcune comunicazioni fuori banda (Redis, un database, il filesystem, ecc. .) in modo che ogni processo rimanga sincronizzato. –