<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">Il giorno 27 novembre 2013 11:10, Manlio Perillo <span dir="ltr"><<a href="mailto:manlio.perillo@gmail.com" target="_blank">manlio.perillo@gmail.com</a>></span> ha scritto:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On 27/11/2013 07:07, Balan Victor wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
ciao a tutti,<br>
ho questa struttura:<br>
* 1 scheduler che scrive su una coda mq una serie di messaggi<br>
* 2 agenti che leggono i messaggi dalla coda<br>
* ogni messaggio sulla coda corrisponde a un "task" da lanciare<br>
* gli agenti lanciano il "task", attendono l'esecuzione e catturano<br>
l'output sullo stdout e l'exit code del task e lo inoltrano a un<br>
"raccoglitore"<br>
<br>
Ho 2 problemi:<br>
1) i task hanno un timeout, finito quello devono essere "killati"<br>
2) i task possono essere dei programmi che a loro volta lanciano dei<br>
altri programmi.<br>
<br>
il primo problema sono riuscito a risolverlo con l'aiuto degli Thread.<br>
Ho usato questo<br>
<a href="http://stackoverflow.com/questions/4158502/python-kill-or-terminate-subprocess-when-timeout" target="_blank">http://stackoverflow.com/<u></u>questions/4158502/python-kill-<u></u>or-terminate-subprocess-when-<u></u>timeout</a><br>

<br>
</blockquote>
<br></div>
*Credi* di averlo risolto...<br>
<br></blockquote><div><br></div><div>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.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Esegui il processo separato in "background", usando subprocess, e se è ancora attivo dopo il timeout killalo.<br>
<br>
Su Linux è banale, anche senza usare subprocess.  Su Windows è comunque possibile.  Con subprocess dovresti comunque cavartela.<br>
<br>
La cosa più complessa e restare in attesa fin quando un processo termina.<br>
Su sistemi POSIX puoi usare sigtimedwait, su FreeBSD kqueue con apposito filtro, su Linux epoll con quell'orrore di signalfd, su Windows WaitForMultipleObjects.<div class="im"><br></div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
mentre il secondo problema non so come risolverlo.<br>
</blockquote>
<br></div>
Perchè è un problema?</blockquote><div><br></div><div>è un problema  perché non so come aspettare l'esecuzione dei figli del task</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Gli agenti sono su<br>
macchina windows e quello che dovrebbero fare è:<br>
1)lanciare il "task"<br>
2)attendere l'esecuzione del task e di eventuali sotto procressi<br>
lanciati dal task<br>
</blockquote>
<br></div>
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.</blockquote><div>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.</div>
</div><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">@enrico software già pronti? del tipo? io ho provato a cercare ma non ho trovato nulla di particolare ... mi sai fare qualche esempio?</div></div>