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

Rispondere a