Il giorno 27 novembre 2013 11:10, Manlio Perillo <manlio.peri...@gmail.com>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