Sto creando un'applicazione Web che utilizza Python + Tornado che fondamentalmente serve i file agli utenti. Non ho databaseChiamata asincrona Tornado a una funzione
I file vengono prelevati e pubblicati direttamente se disponibili o generati al volo in caso contrario.
Desidero che i client vengano offerti in modo asincrono, poiché alcuni file potrebbero essere già disponibili, mentre altri devono essere generati (quindi è necessario attendere e non voglio che blocchino altri utenti).
Ho una classe che gestisce il prelievo o la generazione di file, e ho solo bisogno di chiamarlo da Tornado.
Qual è il modo migliore (più efficiente su CPU e RAM) per ottenerlo? Dovrei usare una discussione? Un processo secondario? Un semplice gen.Task like this one?
Inoltre, vorrei che la mia implementazione funzionasse con Google App Engines (penso che non consentano la generazione di processi secondari?).
Sono relativamente nuovo al servizio web asincrono, quindi qualsiasi aiuto è benvenuto.
Il gen.Task funzionerà bene. Se il tuo file che sta generando/generando codice non può giocare bene in quel modo, un thread funzionerà correttamente. Puoi anche generare più processi, ma non conosco le limitazioni su Google App Engine. – sean
Grazie per la risposta. Sai anche come andrà a finire se genererò più gen.Task? Voglio dire, il mio ** metodo di istanza ** può essere abbastanza costoso e richiede molto tempo, se questo metodo viene chiamato più volte da più utenti, cosa succederà?Tutti i metodi eseguiranno asincrona in parallelo o i metodi successivi attenderanno prima che i precedenti terminino per primi? (nota che ho una singola istanza della mia classe che uso in tutta la mia intera applicazione) – gaborous
Totalmente oscurato, dovrebbe andare bene, ma indipendentemente dalla tua soluzione sarebbe un problema con un sacco di thread a prescindere. Se questa è una preoccupazione, prova a esaminare la suddivisione in processi separati o l'esecuzione di più istanze dietro un bilanciamento del carico. – sean