[Python] gestire processi figli

Balan Victor balan.victor0 a gmail.com
Mer 27 Nov 2013 16:46:32 CET


Il giorno 27 novembre 2013 11:10, Manlio Perillo
<manlio.perillo a 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?
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20131127/0ae8bbc4/attachment.html>


Maggiori informazioni sulla lista Python