[Python] gestire processi figli

Giampaolo Rodola' g.rodola a gmail.com
Dom 1 Dic 2013 11:06:40 CET


2013/12/1 Giampaolo Rodola' <g.rodola a gmail.com>:
> 2013/12/1 Roberto De Ioris <roberto a unbit.it>:
>>
>>> 2013/11/30 Manlio Perillo <manlio.perillo a gmail.com>:
>>>> On 30/11/2013 13:18, Roberto De Ioris wrote:
>>>>>
>>>>> [...]
>>>>>>
>>>>>> Inoltre, curiosità personale visto che non ho mai fatto test, quale è
>>>>>> la
>>>>>>
>>>>>> differenza tra sigtimedwait e kqueue + apposito filtro o epoll +
>>>>>> signalfd?
>>>>>>
>>>>>>
>>>>>
>>>>> che kqueue non usa i segnali, quando un processo muore tutti i poller
>>>>> in
>>>>> ascolto vengono svegliati dal kernel.
>>>>
>>>>
>>>> Vero, hai ragione; ricordavo male.
>>>> kqueue ha sia il filtro EVFILT_PROC che EVFILT_SIGNAL.
>>>> Io stavo assumendo il solo EVFILT_SIGNAL, che dovrebbe funzionare come
>>>> signalfd su Linux, credo/spero.
>>>>
>>>>
>>>>> Praticamente non hai nessuno dei
>>>>> problemi dei segnali unix e (soprattutto) non ti costringe a modificare
>>>>> la
>>>>> logica del tuo programma (o a fare trucchi strani, tra cui includo il
>>>>> mio
>>>>> poller su waitpid suggerito nella mail di prima).
>>>>>
>>>>> Purtroppo su Linux kqueue non c'e' :)
>>>>>
>>>>
>>>> Già, ed un poco alla volta mi sembra stiano aggiungendo interfacce per
>>>> fare
>>>> quello che kqueue fa già! A quando procfd? :)
>>>>
>>>> Peccato, perchè se Linux avesse implementato kqueue, c'era una remota
>>>> possibilità di vederlo standardizzato da POSIX entro il prossimo
>>>> decennio..
>>>
>>> E' meglio di epoll()? Perchè?
>>>
>>
>> "meglio" e' relativo.
>>
>> Sono diverse, a cominciare dal fatto che kqueue non si limita a monitorare
>> file descriptors (ma anche processi, inode, timer...). E' una interfaccia
>> generica per la programmazione ad eventi.
>>
>> Con una sola syscall fai tutto, in linux ne viene aggiunta una nuova per
>> ogni funzionalita' (timerfd, eventfd, signalfd, blahblahfd...) poiche' si
>> preferisce vedere tutto come un "file descriptor".
>>
>> Non so quali dei due approcci sia migliore, ma kqueue e' arrivata prima e
>> piaceva a tutti, portandola su linux avremmo (forse) avuto meno mal di
>> testa
>
> Capisco.
> Mi sento però di spezzare una lancia a favore di epoll() per la
> maggiore facilità di utilizzo. =)
>
> --- Giampaolo
> https://code.google.com/p/pyftpdlib/
> https://code.google.com/p/psutil/
> https://code.google.com/p/pysendfile/


Segnalo un ottimo paper che riassume il tutto:
http://www.eecs.berkeley.edu/~sangjin/2012/12/21/epoll-vs-kqueue.html
Non pensavo che kqueue() fosse così versatile e mi unisco al vostro
dolore: un vero peccato che non ci sia su Linux.


--- Giampaolo
https://code.google.com/p/pyftpdlib/
https://code.google.com/p/psutil/
https://code.google.com/p/pysendfile/


Maggiori informazioni sulla lista Python