[Python] web: sync vs. async

Giampaolo Rodolà g.rodola a gmail.com
Mar 6 Dic 2011 18:34:58 CET


Il 03 dicembre 2011 16:23, Manlio Perillo <manlio.perillo a gmail.com> ha scritto:
>> Una cosa di questo tipo non avrebbe ugualmente funzionato?
>>
>> # pseudo codice
>> import multiprocessing
>> from somehttpd import HTTPServer
>>
>> CPUS = multiprocessing.cpu_count()
>> server = HTTPServer()
>> # create child processes to act as workers
>> for x in range(CPUS - 1):
>>     Process(target=server.serve_forever).start()
>> # main process also acts as a worker
>> server.serve_forever()
>>
>>
>> Se si, ti saresti evitato l'onere di ascoltare su porte multiple e
>> ovviamente tutta la complessità aggiuntiva che ne deriva.
>>
>
> Questo è essenzialmente l'approccio usato da Nginx.
>
> Però c'è un dettaglio subdolo: con questo metodo ciascun processo figlio
> chiama la accept sullo stesso file descriptor ereditato dal padre e ci
> potrebbero essere dei problemi subdoli.
>
> Ad esempio il problema chiamato "thundering herd" oppure (ma su questo
> non riesco a trovare dei riferimenti, l'ho letto dall'autore di Nginx)
> il sistema operativo potrebbe **non** distribuire il carico equamente su
> tutti i sotto processi.
>
>
> Ciao  Manlio

Riusciresti a darmi qualche dettaglio in più?
Sono lì lì per portare questa modifica in produzione.
Effettuando dei test finora non mi è sembrato di notare alcunchè di
"subdolo" o fuori dalla norma.


--- Giampaolo
http://code.google.com/p/pyftpdlib/
http://code.google.com/p/psutil/


Maggiori informazioni sulla lista Python