Topic: Istanze flask  (Letto 414 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline draio

  • python unicellularis
  • *
  • Post: 3
  • Punti reputazione: 0
    • Mostra profilo
Istanze flask
« il: Gennaio 18, 2018, 17:03 »
Ciao a tutti, sto cercando di capire quale dovrebbe essere il corretto funzionamento di flask (e suppongo anche django) rispetto al servire le pagine di un sito web.

Cerco di spiegarla brevemente.

Se eseguo flask come web server ho un unico processo flask che risponde a tutte le chiamate.
Ma se flask viene gestito tramite mod-wsgi quanti processi di flask dovrebbero venir eseguiti?
Uno per ogni pagina che genera? O mod-wsgi dovrebbe occuparsi di mantenere un unico processo flask e fargli servire le pagine?

Io suppongo la seconda, tant'é che su una VM apache+mod-wsgi , ho un unico processo flask che risponde a tutte le chiamate.
So che è un unico processo perché gli faccio accodare in un file log l'ora e il pid ogni volta che parte.

Chiedo tutto questo perché mi son fatto aggiungere mod-wsgi su un server con cpanel, e per vedere una manciata di pagine il risultato è questo:

2018-01-18 15:48:34 - PID: 18938
2018-01-18 15:48:36 - PID: 19024
2018-01-18 15:48:36 - PID: 19022
2018-01-18 15:48:36 - PID: 19012
2018-01-18 15:48:37 - PID: 18896
2018-01-18 15:48:37 - PID: 19046
2018-01-18 15:49:12 - PID: 19113
2018-01-18 15:49:14 - PID: 19027
2018-01-18 15:49:14 - PID: 18929
2018-01-18 15:49:17 - PID: 19114
2018-01-18 15:49:17 - PID: 19117

E' normale?

Grazie
Dario

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.869
  • Punti reputazione: 9
    • Mostra profilo
Re:Istanze flask
« Risposta #1 il: Gennaio 19, 2018, 19:19 »
Non... sono sicuro di aver capito?...
Flask non è un web server.
Se vuoi usare Apache come web server, allora probabilmente mod_wsgi è l'interfaccia che vuoi usare tra Flask e Apache. Ora, in questo contesto non saprei, non sono un esperto di flask, ma a me pare che dovrebbe esserci una sola istanza di flask in vita... comunque vedi qui per dettagli: http://flask.pocoo.org/docs/0.12/deploying/mod_wsgi/.
Se Apache e/o mod_wsgi non ti piacciono, hai altre opzioni: http://flask.pocoo.org/docs/0.12/deploying/

"eseguire flask come web server" non è possibile, perché flask non è un web server, quindi non so a che scenario ti stai riferendo...

Offline draio

  • python unicellularis
  • *
  • Post: 3
  • Punti reputazione: 0
    • Mostra profilo
Re:Istanze flask
« Risposta #2 il: Gennaio 20, 2018, 23:24 »
Ciao, flask ha un "built-in development server " che serve, appunto come dice il nome, solo per quando sviluppi, non va certo bene per mettere un sito online (comunque fa niente, non è questo il punto).

Ho apache+mod_wsgi sia su macchine virtuali che su un server online.
Sulle mie VM ho seguito tutto funziona correttamente e parte un solo processo di flask
Sul server online invece mi ri-partono i processi flask ogni tre per due.
Se stresso un po' la macchina con wrkl ( https://github.com/wg/wrk ) mi partono un decine, se non centinaia, di processi contemporaneamente e le cpu vanno oltre il 90%
Anche abbassando di molto i parametri degli esempi con 12 thread e 20 chiamate.

La configurazione online non la posso vedere, me l'hanno fatto i gestori del server e quindi, prima di tutto, stavo cercando di capire se era una cosa "normale" o no.
Loro dicono cose tipo:
- " la sessione viene eseguita in relazione alla chiamata, così come avviene con il fastcgi,"
- "riciclare un processo per ogni chiamata non è come lanciare una istanza nuova"
- "se il processo deve essere riciclato ad ogni istanza esso deve rimanere in ascolto come se fosse un demone stand-alone, come tomcat, esso ovviamente apre una serie di istanze con il quale vengono eseguite, ovviamente se le istanze sono multiple i processi vengono parallelizzati , in poche parole per ogni chiamata è più efficiente aprire nuovi processi e mandare in timeout i processi precedenti che non riciclare lo stesso , questo causerebbe una coda alle chiamate , ovviamente il processo mod_wsgi dipende dalla istanza di apache che lo fa girare come fosse un processo figlio"

Che sono tutte belle parole eh ... ma non mi risolvono il problema che se simulo 20 utenti a spasso sul sito la cpu chiede pietà.

Grazie

Offline draio

  • python unicellularis
  • *
  • Post: 3
  • Punti reputazione: 0
    • Mostra profilo
Re:Istanze flask
« Risposta #3 il: Gennaio 22, 2018, 16:39 »
Caso mai a qualcuno interessasse, mi hanno risposto un laconico:

"ho modificato la configurazione del modulo limitando il numero di processi a 2 in favore dei thread.
 In questo modo il WSGI non dovrebbe prendere tutte le risorse della macchina dato un numero di richieste elevato (al limite rallenta solo WSGI)."

E hanno chiuso il ticket. Ora i processi non si riavviano più, sono due e solo due. 
Se stresso un po' la macchina con wrk al massimo arriva al 30% e fino a 50 connessioni aperte contemporaneamente regge. Con 100 è lentino
L'unico paragone che posso fare è con l'equivalente vecchio (antico) sito in php, con 100 connessioni è ancora abbastanza veloce a rispondere ma la CPU va al 70%.

Va boh ... vediamo come va ...

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.869
  • Punti reputazione: 9
    • Mostra profilo
Re:Istanze flask
« Risposta #4 il: Gennaio 22, 2018, 17:38 »
Mah... fatti un server virtuale, e installati e configurati tutto quanto. Almeno (non) sai quello che (non) fai.  :)