Server multiutente Python / Twisted: cosa è più efficiente?
-
19-08-2019 - |
Domanda
In Python, se voglio che il mio server si ridimensioni bene in termini di CPU, devo ovviamente generare più processi. Mi chiedevo quale fosse meglio (usando Twisted):
A) Il processo di gestione (quello che detiene le connessioni socket effettive) inserisce i pacchetti ricevuti in una coda condivisa (quella dal modulo multiprocessore), ei processi di lavoro estraggono i pacchetti dalla coda, li elaborano e inviano il risultati al cliente.
B) Il processo manager (colui che detiene le connessioni socket effettive) avvia un thread differito e quindi chiama la funzione apply () sul pool di processi. Una volta che il risultato ritorna dal processo di lavoro, il gestore invia il risultato al client.
In entrambe le implementazioni, i processi di lavoro utilizzano pool di thread in modo che possano lavorare su più di un pacchetto alla volta (poiché ci saranno molte query sul database).
Soluzione
Penso che B sia problematico. Il thread verrebbe eseguito solo su una CPU e anche se esegue un processo, il thread è ancora in esecuzione. A potrebbe essere migliore.
È meglio provare a misurare entrambi in termini di tempo e vedere quale è più veloce e quale si adatta bene. Tuttavia, ribadirò che dubito fortemente che B si ridimensionerà bene.
Altri suggerimenti
Penso che " A " è la risposta che vuoi, ma non devi farlo da solo.
Hai considerato ampolla ?