<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2014-05-16 20:06 GMT+02:00 Balan Victor <span dir="ltr"><<a href="mailto:balan.victor0@gmail.com" target="_blank">balan.victor0@gmail.com</a>></span>:<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"><div dir="ltr">Ho necessità di fare quando segue:<div><br>
</div><div>estrarre in continuazione una lista di comandi e lanciare al massino N comandi alla volta. Per fare questo pensavo di usare il modulo threading e ho scritto un codice simile a quello che trovate a questo indirizzo: <a href="http://pastebin.com/YZxa3VG8" target="_blank">http://pastebin.com/YZxa3VG8</a></div>

<div><br></div></div></blockquote><div><br></div><div>Ho riletto il codice e mi sono accorto di questo pattern:</div><div><br></div><div><span class="" style="white-space:pre">  </span>def run(self):</div><div><span class="" style="white-space:pre">             </span>while True:</div>
<div><span class="" style="white-space:pre">                    </span>with self.semaphore:</div><div><span class="" style="white-space:pre">                               </span>task_dict = self.todoQ.get()</div><div><span class="" style="white-space:pre">                               </span>task = Task(task_dict)</div>
<div><span class="" style="white-space:pre">                            </span>task.start()</div><div><br></div><div>Perchè usi un semaforo?</div><div>Quale è il valore di todoQ_size?</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">
<div dir="ltr"><div></div><div>Se ora faccio partire il tutto mi trovo con un output simile a questo:</div><div><br></div><div><div>DEBUG 4460 Consumer 2014-05-16 20:00:20,345: Get task task 32</div><div>DEBUG 4460 Consumer 2014-05-16 20:00:20,345: Get task task 3</div>

<div>DEBUG 4460 Consumer 2014-05-16 20:00:20,345: Get task task 52</div><div>DEBUG 4460 Consumer 2014-05-16 20:00:20,345: Get task task 43</div><div>DEBUG 4460 Consumer 2014-05-16 20:00:20,345: Get task task 27</div></div>
</div></blockquote><div><br></div><div>Quanti "get task %d" ottieni dipende da todoQ_size.</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">
<div dir="ltr"><div><div>
DEBUG 4552 task 52 2014-05-16 20:00:20,345: task 52 starting ...</div></div><div><br></div><div>io dichiaro una coda di dimensione 1. </div></div></blockquote><div><br></div><div>Ti riferisci al BoundedSemaphore(1) o intendi dire che todoQ_size è 1?</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"><div dir="ltr"><div>Mi aspetto che quando faccio todoQ.put questo resti in attesa finché nella coda non si libera un posto invece non succede cosi. Inoltre dal log sembra che scarichi i task nel seguente ordine 32, 3, 52, 43, 27 e cosi via. Mi aspetto che il primo task sia 32, invece è 52.</div>

<div><br></div></div></blockquote><div><br></div><div>In che punto del programma viene fatto il logging "task %d starting" ?</div><div><br></div><div>Ricorda che passa un tempo indeterminato tra quando richiedi l'esecuzione di un processo e quando il sistema operativo lo esegue.</div>
<div>Quindi se in un thread esegui "contemporaneamente" N processi, non è detto che il sistema operativo li esegua in quell'ordine.</div><div><br></div><div>Quello che scrivi è corretto solo se il logging lo fai subito dopo todoQ.get e non quando il processo esterno viene eseguito.</div>
<div></div></div><br></div><div class="gmail_extra">> [...]</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Ciao   Manlio</div></div>