2014-05-16 20:06 GMT+02:00 Balan Victor <balan.vict...@gmail.com>: > Ho necessità di fare quando segue: > > 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: > http://pastebin.com/YZxa3VG8 > > Ho riletto il codice e mi sono accorto di questo pattern:
def run(self): while True: with self.semaphore: task_dict = self.todoQ.get() task = Task(task_dict) task.start() Perchè usi un semaforo? Quale è il valore di todoQ_size? > Se ora faccio partire il tutto mi trovo con un output simile a questo: > > DEBUG 4460 Consumer 2014-05-16 20:00:20,345: Get task task 32 > DEBUG 4460 Consumer 2014-05-16 20:00:20,345: Get task task 3 > DEBUG 4460 Consumer 2014-05-16 20:00:20,345: Get task task 52 > DEBUG 4460 Consumer 2014-05-16 20:00:20,345: Get task task 43 > DEBUG 4460 Consumer 2014-05-16 20:00:20,345: Get task task 27 > Quanti "get task %d" ottieni dipende da todoQ_size. > DEBUG 4552 task 52 2014-05-16 20:00:20,345: task 52 starting ... > > io dichiaro una coda di dimensione 1. > Ti riferisci al BoundedSemaphore(1) o intendi dire che todoQ_size è 1? > 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. > > In che punto del programma viene fatto il logging "task %d starting" ? Ricorda che passa un tempo indeterminato tra quando richiedi l'esecuzione di un processo e quando il sistema operativo lo esegue. Quindi se in un thread esegui "contemporaneamente" N processi, non è detto che il sistema operativo li esegua in quell'ordine. Quello che scrivi è corretto solo se il logging lo fai subito dopo todoQ.get e non quando il processo esterno viene eseguito. > [...] Ciao Manlio
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python