[Python] cgi ottimizzati ERA: web: sync vs. async

Roberto De Ioris roberto a unbit.it
Mer 14 Dic 2011 08:34:25 CET


>
> Il "trucco" è usare un socket UNIX domain bidirezionale, invece di due
> pipe.
> In questo modo per Nginx la comunicazione con il processo CGI dovrebbe
> essere analoga a quella con un client remoto.
> In particolare non dovrebbe mai essere necessario chiamare waitpid.
>
>

Ma cosi' non mi ritrovo pieno di zombie ? Oppure intendi comunque chiamare
waitpid(-1...) a intervalli regolari per fare pulizia ? A rigor di logica
quando sei in attesa dello STDOUT del CGI se ricevi uno stream vuoto,
allora il processo dovrebbe aver finito il suo lavoro. Il problema e' se
qualche cgi "cattivo" chiama una close(1) nel suo codice. A quel punto la
chiamata a waitpid() sarebbe bloccante.

In realta' poi mi sono ricordato della nuova syscall signalfd (in linux)
che si potrebbe agganciare al SIGCHLD, quindi si potrebbe simulare il
comportamento di kqueue(). Probabilmente e' una strada percorribile, se
non fosse per il fatto che Igor e' da sempre allergico a chiamare fork()
(o clone()) in nginx, e quindi ho paura che una inclusione nel ramo
ufficiale potrebbe essere "problematica".

-- 
Roberto De Ioris
http://unbit.it


Maggiori informazioni sulla lista Python