[Python] gestire processi figli

2013-11-26 Thread Balan Victor
ciao a tutti,
ho questa struttura:
* 1 scheduler che scrive su una coda mq una serie di messaggi
* 2 agenti che leggono i messaggi dalla coda
* ogni messaggio sulla coda corrisponde a un "task" da lanciare
* gli agenti lanciano il "task", attendono l'esecuzione e catturano
l'output sullo stdout e l'exit code del task e lo inoltrano a un
"raccoglitore"

Ho 2 problemi:
1) i task hanno un timeout, finito quello devono essere "killati"
2) i task possono essere dei programmi che a loro volta lanciano dei altri
programmi.

il primo problema sono riuscito a risolverlo con l'aiuto degli Thread. Ho
usato questo
http://stackoverflow.com/questions/4158502/python-kill-or-terminate-subprocess-when-timeout

mentre il secondo problema non so come risolverlo. Gli agenti sono su
macchina windows e quello che dovrebbero fare è:
1)lanciare il "task"
2)attendere l'esecuzione del task e di eventuali sotto procressi lanciati
dal task
3)se è stato raggiunto il timeout "killare" tutto

qualcuno ha qualche idea?

Grazie.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-11-26 Thread Balan Victor
Il giorno 27 novembre 2013 07:07, Balan Victor  ha
scritto:

> ciao a tutti,
> ho questa struttura:
> * 1 scheduler che scrive su una coda mq una serie di messaggi
> * 2 agenti che leggono i messaggi dalla coda
> * ogni messaggio sulla coda corrisponde a un "task" da lanciare
> * gli agenti lanciano il "task", attendono l'esecuzione e catturano
> l'output sullo stdout e l'exit code del task e lo inoltrano a un
> "raccoglitore"
>
> Ho 2 problemi:
> 1) i task hanno un timeout, finito quello devono essere "killati"
> 2) i task possono essere dei programmi che a loro volta lanciano dei altri
> programmi.
>
> il primo problema sono riuscito a risolverlo con l'aiuto degli Thread. Ho
> usato questo
> http://stackoverflow.com/questions/4158502/python-kill-or-terminate-subprocess-when-timeout
>
> mentre il secondo problema non so come risolverlo. Gli agenti sono su
> macchina windows e quello che dovrebbero fare è:
> 1)lanciare il "task"
> 2)attendere l'esecuzione del task e di eventuali sotto procressi lanciati
> dal task
> 3)se è stato raggiunto il timeout "killare" tutto
>
> qualcuno ha qualche idea?
>
> Grazie.
>


ho dimenticato di aggiungere che i "task" non sono necesssariamente
programmi python e a volte sono dotati di GUI
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-11-27 Thread enrico franchi
2013/11/27 Balan Victor 

> il primo problema sono riuscito a risolverlo con l'aiuto degli Thread. Ho
> usato questo
> http://stackoverflow.com/questions/4158502/python-kill-or-terminate-subprocess-when-timeout
>

Ahi ahi... i thread hanno sempre qualche sorpresina.


Comunque, a naso ci sono tanti software belli e fatti che fanno quello che
vuoi tu.
C'e' un motivo specifico per implementare invece che usare uno di questi?




-- 
.
..: -enrico-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-11-27 Thread Manlio Perillo

On 27/11/2013 07:07, Balan Victor wrote:

ciao a tutti,
ho questa struttura:
* 1 scheduler che scrive su una coda mq una serie di messaggi
* 2 agenti che leggono i messaggi dalla coda
* ogni messaggio sulla coda corrisponde a un "task" da lanciare
* gli agenti lanciano il "task", attendono l'esecuzione e catturano
l'output sullo stdout e l'exit code del task e lo inoltrano a un
"raccoglitore"

Ho 2 problemi:
1) i task hanno un timeout, finito quello devono essere "killati"
2) i task possono essere dei programmi che a loro volta lanciano dei
altri programmi.

il primo problema sono riuscito a risolverlo con l'aiuto degli Thread.
Ho usato questo
http://stackoverflow.com/questions/4158502/python-kill-or-terminate-subprocess-when-timeout



*Credi* di averlo risolto...

Esegui il processo separato in "background", usando subprocess, e se è 
ancora attivo dopo il timeout killalo.


Su Linux è banale, anche senza usare subprocess.  Su Windows è comunque 
possibile.  Con subprocess dovresti comunque cavartela.


La cosa più complessa e restare in attesa fin quando un processo termina.
Su sistemi POSIX puoi usare sigtimedwait, su FreeBSD kqueue con apposito 
filtro, su Linux epoll con quell'orrore di signalfd, su Windows 
WaitForMultipleObjects.



mentre il secondo problema non so come risolverlo.


Perchè è un problema?


Gli agenti sono su
macchina windows e quello che dovrebbero fare è:
1)lanciare il "task"
2)attendere l'esecuzione del task e di eventuali sotto procressi
lanciati dal task


Questo è un problema solo se chi esegue un sottoprocesso non aspetta che 
il figlio termina.  Su UNIX questa è una cosa cattiva e fa diventare il 
processo figlio uno zombie.



3)se è stato raggiunto il timeout "killare" tutto

qualcuno ha qualche idea?



Ciao  Manlio

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-11-27 Thread Balan Victor
Il giorno 27 novembre 2013 11:10, Manlio Perillo
ha scritto:

> On 27/11/2013 07:07, Balan Victor wrote:
>
>> ciao a tutti,
>> ho questa struttura:
>> * 1 scheduler che scrive su una coda mq una serie di messaggi
>> * 2 agenti che leggono i messaggi dalla coda
>> * ogni messaggio sulla coda corrisponde a un "task" da lanciare
>> * gli agenti lanciano il "task", attendono l'esecuzione e catturano
>> l'output sullo stdout e l'exit code del task e lo inoltrano a un
>> "raccoglitore"
>>
>> Ho 2 problemi:
>> 1) i task hanno un timeout, finito quello devono essere "killati"
>> 2) i task possono essere dei programmi che a loro volta lanciano dei
>> altri programmi.
>>
>> il primo problema sono riuscito a risolverlo con l'aiuto degli Thread.
>> Ho usato questo
>> http://stackoverflow.com/questions/4158502/python-kill-
>> or-terminate-subprocess-when-timeout
>>
>>
> *Credi* di averlo risolto...
>
>
dalle prove che ho fatto finché lanciavo "task" che erano semplici cmd/bat
che facevano una serie di azioni tutto andava perfettamente. Funzionava
anche il timeout. E non ho dovuto nemmeno spingermi a usare codice
specifico di windows.


> Esegui il processo separato in "background", usando subprocess, e se è
> ancora attivo dopo il timeout killalo.
>
> Su Linux è banale, anche senza usare subprocess.  Su Windows è comunque
> possibile.  Con subprocess dovresti comunque cavartela.
>
> La cosa più complessa e restare in attesa fin quando un processo termina.
> Su sistemi POSIX puoi usare sigtimedwait, su FreeBSD kqueue con apposito
> filtro, su Linux epoll con quell'orrore di signalfd, su Windows
> WaitForMultipleObjects.
>
>
>  mentre il secondo problema non so come risolverlo.
>>
>
> Perchè è un problema?


è un problema  perché non so come aspettare l'esecuzione dei figli del task


>
>
>  Gli agenti sono su
>> macchina windows e quello che dovrebbero fare è:
>> 1)lanciare il "task"
>> 2)attendere l'esecuzione del task e di eventuali sotto procressi
>> lanciati dal task
>>
>
> Questo è un problema solo se chi esegue un sottoprocesso non aspetta che
> il figlio termina.  Su UNIX questa è una cosa cattiva e fa diventare il
> processo figlio uno zombie.

Il problema è che su windows è una cosa abbastanza comune e non ho la
possibilità di controllare preventivamente i "task" e verificare che siano
fatti bene.


@enrico software già pronti? del tipo? io ho provato a cercare ma non ho
trovato nulla di particolare ... mi sai fare qualche esempio?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-11-27 Thread Manlio Perillo

On 27/11/2013 16:46, Balan Victor wrote:

[...]
il primo problema sono riuscito a risolverlo con l'aiuto degli
Thread.
Ho usato questo

http://stackoverflow.com/__questions/4158502/python-kill-__or-terminate-subprocess-when-__timeout




*Credi* di averlo risolto...


dalle prove che ho fatto finché lanciavo "task" che erano semplici
cmd/bat che facevano una serie di azioni tutto andava perfettamente.
Funzionava anche il timeout. E non ho dovuto nemmeno spingermi a usare
codice specifico di windows.



Il fatto è che non servono i thread. Ma se hai già il codice pronto e 
funzionante, continua pure



[...]

mentre il secondo problema non so come risolverlo.


Perchè è un problema?


è un problema  perché non so come aspettare l'esecuzione dei figli del task
[...]
Il problema è che su windows è una cosa abbastanza comune e non ho la
possibilità di controllare preventivamente i "task" e verificare che
siano fatti bene.



Ok, allora.

Una semplice ricerca per
"windows waiting grandchild process" mi restituisce:
http://stackoverflow.com/questions/1683902/waiting-for-grandchild-processes-in-windows

Auguri!

> [...]


Ciao  Manlio
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-11-29 Thread Giampaolo Rodola'
2013/11/27 Manlio Perillo :
> La cosa più complessa e restare in attesa fin quando un processo termina.
> Su sistemi POSIX puoi usare sigtimedwait, su FreeBSD kqueue con apposito
> filtro, su Linux epoll con quell'orrore di signalfd, su Windows
> WaitForMultipleObjects.

Molto interessante. Sto affrontando esattamente questo problema in
psutil, ovvero aspettare che un certo PID termini specificando un
timeout:
https://code.google.com/p/psutil/issues/detail?id=445
Ho dato un occhio a sigtimedwait() (che tra l'altro hanno esposto in
Python 3.3).
Vedo che si aspetta una lista di segnali e la cosa mi spiazza un po'.
Dovrei passargli SIGTERM e SIGKILL? Ci sono altri segnali che causano
la morte di un processo e che dovrei prendere in considerazione?

--- Giampaolo
https://code.google.com/p/pyftpdlib/
https://code.google.com/p/psutil/
https://code.google.com/p/pysendfile/
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-11-29 Thread Roberto De Ioris

> 2013/11/27 Manlio Perillo :
>> La cosa più complessa e restare in attesa fin quando un processo
>> termina.
>> Su sistemi POSIX puoi usare sigtimedwait, su FreeBSD kqueue con apposito
>> filtro, su Linux epoll con quell'orrore di signalfd, su Windows
>> WaitForMultipleObjects.
>
> Molto interessante. Sto affrontando esattamente questo problema in
> psutil, ovvero aspettare che un certo PID termini specificando un
> timeout:
> https://code.google.com/p/psutil/issues/detail?id=445
> Ho dato un occhio a sigtimedwait() (che tra l'altro hanno esposto in
> Python 3.3).
> Vedo che si aspetta una lista di segnali e la cosa mi spiazza un po'.
> Dovrei passargli SIGTERM e SIGKILL? Ci sono altri segnali che causano
> la morte di un processo e che dovrei prendere in considerazione?
>
> ---

La morte di un child e' segnalata da SIGCHLD (di default, occhio pero' che
e' trappabile), ma non lavorerei con i segnali unix (per questo specifico
problema) neanche sotto tortura.

Dove non hai a disposizione kqueue (e WaitForMultipleObjects) vai di
polling e waitpid con WHOHANG:

while 1:
aspetta...
if waitpid(blah blah, WNOHANG):
break


-- 
Roberto De Ioris
http://unbit.it
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-11-29 Thread Giampaolo Rodola'
> La morte di un child e' segnalata da SIGCHLD (di default, occhio pero' che
> e' trappabile), ma non lavorerei con i segnali unix (per questo specifico
> problema) neanche sotto tortura.
>
> Dove non hai a disposizione kqueue (e WaitForMultipleObjects) vai di
> polling e waitpid con WHOHANG:
>
> while 1:
> aspetta...
> if waitpid(blah blah, WNOHANG):
> break

Ho il requirement di farlo per qualunque PID, non solo i figli del mio processo.

--- Giampaolo
https://code.google.com/p/pyftpdlib/
https://code.google.com/p/psutil/
https://code.google.com/p/pysendfile/
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-11-29 Thread Roberto De Ioris

>> La morte di un child e' segnalata da SIGCHLD (di default, occhio pero'
>> che
>> e' trappabile), ma non lavorerei con i segnali unix (per questo
>> specifico
>> problema) neanche sotto tortura.
>>
>> Dove non hai a disposizione kqueue (e WaitForMultipleObjects) vai di
>> polling e waitpid con WHOHANG:
>>
>> while 1:
>> aspetta...
>> if waitpid(blah blah, WNOHANG):
>> break
>
> Ho il requirement di farlo per qualunque PID, non solo i figli del mio
> processo.
>
>

tutta la famiglia wait() puo' attendere anche i process group, se ti
riferisci ad altro, beh non si puo' fare, e' contro lo standard POSIX :)

un approccio estremo (che pero' e' usato anche da upstart) e' di
agganciare una ptrace che segua le fork(), ma probabilmente e' un filino
esagerato...

P.S. su Linux in realta' la syscall prctl ha aggiunto una serie di nuove
modalita' per cui il legale tra parent e children (e nipoti) puo' essere
modificato in modi divertenti

-- 
Roberto De Ioris
http://unbit.it
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-11-29 Thread Dario Bertini
2013/11/27 Balan Victor :
> @enrico software già pronti? del tipo? io ho provato a cercare ma non ho
> trovato nulla di particolare ... mi sai fare qualche esempio?

non l'ho mai usato, ma così sui 2 piedi:

http://supervisord.org/
(nella doc, accenna anche a daemontools e runit, che fanno lavori simili)

il blog post nel quale ne avevo sentito parlare per la prima volta
(forse, ormai è uscito dalla cronologia):
http://www.tuicool.com/articles/qy2EJz3 [1]

un'altra alternativa:
http://skarnet.org/software/s6/why.html


[1] Titolo: "Daemon Showdown: Upstart vs. Runit vs. Systemd vs. Circus
vs. God" (si sa mai che fra qualche mese quella pagina vada down)

-- 
xmpp: berda...@gmail.com
bitmessage: BM-2cTYXfGiSTsnx3righ6aHcJSWe4MV17jDP
gpg fingerprint: 3F8D53518012716C4EEF7DF67B498306B3BF75A0 (used just
for signing commits)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-11-30 Thread Manlio Perillo

On 29/11/2013 19:59, Roberto De Ioris wrote:

[...]
La morte di un child e' segnalata da SIGCHLD (di default, occhio pero' che
e' trappabile), ma non lavorerei con i segnali unix (per questo specifico
problema) neanche sotto tortura.

Dove non hai a disposizione kqueue (e WaitForMultipleObjects) vai di
polling e waitpid con WHOHANG:



Perchè, epoll + signalfd non va bene?

Inoltre, curiosità personale visto che non ho mai fatto test, quale è la 
differenza tra sigtimedwait e kqueue + apposito filtro o epoll + signalfd?




Ciao  Manlio
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-11-30 Thread Roberto De Ioris

> On 29/11/2013 19:59, Roberto De Ioris wrote:
>> [...]
>> La morte di un child e' segnalata da SIGCHLD (di default, occhio pero'
>> che
>> e' trappabile), ma non lavorerei con i segnali unix (per questo
>> specifico
>> problema) neanche sotto tortura.
>>
>> Dove non hai a disposizione kqueue (e WaitForMultipleObjects) vai di
>> polling e waitpid con WHOHANG:
>>
>
> Perchè, epoll + signalfd non va bene?

va bene, e' che non mi piace proprio dover fare affidamento su SIGCHLD.

Purtroppo i segnali posix/unix sono una di quelle cose che ti fanno
pensare: "fico c'e' su tutte le piattaforme, uso loro e passa la paura".
Il problema e' che poi ogni OS li gestisce a modo suo (soprattutto gli
unix proprietari)


>
> 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. 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' :)

-- 
Roberto De Ioris
http://unbit.it
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-11-30 Thread Manlio Perillo

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..



Ciao  Manlio
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-11-30 Thread Giampaolo Rodola'
2013/11/30 Manlio Perillo :
> 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è?

--- Giampaolo
https://code.google.com/p/pyftpdlib/
https://code.google.com/p/psutil/
https://code.google.com/p/pysendfile/
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-11-30 Thread Roberto De Ioris

> 2013/11/30 Manlio Perillo :
>> 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


-- 
Roberto De Ioris
http://unbit.it
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-12-01 Thread Giampaolo Rodola'
2013/12/1 Roberto De Ioris :
>
>> 2013/11/30 Manlio Perillo :
>>> 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/
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-12-01 Thread Giampaolo Rodola'
2013/12/1 Giampaolo Rodola' :
> 2013/12/1 Roberto De Ioris :
>>
>>> 2013/11/30 Manlio Perillo :
 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/
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] gestire processi figli

2013-12-01 Thread Manlio Perillo

On 30/11/2013 16:22, Giampaolo Rodola' wrote:

[...]

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è?



Come interfaccia preferisco kqueue, perchè "abbandona" l'idea che tutto 
è un file, ed invece offre dei filtri che si occupano, nel kernel, di 
gestire i vari oggetti passati (files, processi, timer, etc).


Su Linux, invece, hanno preferito aggiungere nuove interfacce per 
mappare oggetti che nulla hanno a che vedere con i file sul filesystem 
virtuale (signalfd, timerfd, eventfd).  L'unico vantaggio che vedo è che 
puoi usare questi oggetti anche con le "vecchie" select e poll, mentre 
su FreeBSD puoi usare solo kqueue.


Un altro vantaggio è che i files creati con signalfd e amici possono 
anche essere letti, per avere maggiori informazioni; invece con kqueue i 
dati aggiuntivi devono usare una interfaccia fissa.



> [...]


Ciao  Manlio
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python