[Python] gestire processi figli
Manlio Perillo
manlio.perillo a gmail.com
Mer 27 Nov 2013 11:10:24 CET
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
Maggiori informazioni sulla lista
Python