<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Oct 29, 2014 at 2:52 PM, Antonio Conte <span dir="ltr"><<a href="mailto:barbone67@gmail.com" target="_blank">barbone67@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">salve a tutti,<br>
<br>
sto lavorando su uno script che lancia su piu' client un comando.</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">per il momento sto usando subprocess, ma volevo lanciare i processi in parallelo<br>
e ricavare l'output mano a mano che i processi terminano.<br>
<br></blockquote><div><br></div><div>I processi li lanci in parallelo con subprocess.  Il problema è l'interazione.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
tenete conto che lo script va lanciato da cron, e mi serve l'output del comando<br>
per inviarlo via mail.<br></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
dopo varie prove sono arrivato a questo, ma mi chiedevo se fosse il modo giusto<br>
(cioe' l'utilizzo del contatore _act) per aspettare che tutti i processi<br>
terminino e per leggere dalla queue l'output.<br>
<br></blockquote><div><br></div><div>Nel codice del thread ti suggerisco di usare la funzione subprocess.check_output.</div><div><br></div><div>In generale io proverei ad usare multiprocessing.Pool ed il metodo map.</div><div>Purtroppo non esiste l'analogo Pool nel modulo threading, però da una veloce ricerca è venuta fuori questa "sorpresa":</div><div><a href="http://stackoverflow.com/questions/3033952/python-thread-pool-similar-to-the-multiprocessing-pool">http://stackoverflow.com/questions/3033952/python-thread-pool-similar-to-the-multiprocessing-pool</a><br></div><div><br></div><div>>>> f<span class="" style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;white-space:inherit;font-size:15px;line-height:20.0303993225098px;margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(0,0,139);background:transparent">rom</span><span class="" style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;white-space:inherit;color:rgb(0,0,0);font-size:15px;line-height:20.0303993225098px;margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> multiprocessing</span><span class="" style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;white-space:inherit;color:rgb(0,0,0);font-size:15px;line-height:20.0303993225098px;margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">.</span><span class="" style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;white-space:inherit;color:rgb(0,0,0);font-size:15px;line-height:20.0303993225098px;margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent">pool </span><span class="" style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;white-space:inherit;font-size:15px;line-height:20.0303993225098px;margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(0,0,139);background:transparent">import</span><span class="" style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;white-space:inherit;color:rgb(0,0,0);font-size:15px;line-height:20.0303993225098px;margin:0px;padding:0px;border:0px;vertical-align:baseline;background:transparent"> </span><span class="" style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;white-space:inherit;font-size:15px;line-height:20.0303993225098px;margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(43,145,175);background:transparent">ThreadPool</span></div><div><br></div><div>usando ThreadPool.map il tuo codice diventa molto più semplice ed inoltre non soffri del problema che ti ha segnalato Daniele su troppi processi/thread in esecuzione.</div><div><br></div><div>Se sei curioso esiste anche una alternativa senza usare un thread o processo di supporto, ma è più complesso e non trovi nulla di pronto nella stdlib (forse qualcosa in Python 3.x).</div><div><br></div><div>> [...]</div><div><br></div><div><br></div><div>Ciao  Manlio </div></div></div></div>