* 29/10/2014, Daniele Varrazzo wrote : > Preparati, perche' ora si scatena la flame war che scatta > automaticamente quando qualcuno pronuncia la parola "thread".
lungi da me ! ;-) cmq cercando su internet ho trovato tutto e il contrario di tutto, ma mai precisamente quello che serviva a me. > Penso vada "abbastanza" bene, perche' non hai race condition: _act viene > comunque gestito solo dal thread principale. ok > Un modo di coordinarsi piu` robusto sarebbe quello di usare Thread.join, > ma come avrai gia` scoperto questo ti impedirebbe di avere un output > graduale nel thread principale. Lo puoi usare se eviti la print nel loop > principale: lanci prima tutti i processi nei thread separati, poi > t.join() per ogni thread. questo posso provare a farlo. ma il join lo mettersti DOPO aver lanciato i singoli thread ? cioe' qualcosa del genere: [CODE] _ths = [] for k, v in clients.items(): for scr in v['server']: _cmd = [ 'ssh', '%s@%s' % (k, v['host'],), '"/Users/%s/bin/%s_%s.command"' % (k, k, scr,) ] + _extra_params _ths.append(thr.Thread(target=run_command, args=(qq, _cmd))) _ths[-1].start() for _th in _ths: _th.join() [/CODE] > Nel tuo codice, qq.task_done() non credo ti serva a niente: quello serve > se es. il thread principale chiamasse qq.put() e poi qq.join() ed avessi > un pool di worker thread che chiamassero qq.get() e qq.task_done(): ah ok ! ho letto malissimo io :-| > cosi' potresti avere es. un pool di workers a lavoro in round-robin > sulla coda dei compiti (es. 10 processi a lavoro su 100 compiti). Tu > invece hai un mapping 1-1 tra processi e compiti e solo una coda di > risultati: la tua struttura e' piu' semplice ma probabilmente scala > peggio: se avessi 1000 compiti da fare la tua macchina non sarebbe molto > felice di lanciare 1000 thread + 1000 processi tutti insieme. tieni conto che sono degli script da lanciare ogni 10/15 minuti su dei Mac (con un lock in locale che impedisce di lanciare piu' volte lo script) quindi niente di trascendentale. cmq adesso ci provo a fare le correzioni che hai detto, e se ho altre domande mi faccio risentire. grazie mille per le spiegazioni ! saluti P.S. non uso cron sui Mac perche' dalla 10.8 in poi e' stato "inglobato" in launchd e, praticamente, non funziona, senza nessun segnale nei log :-( -- Never try to teach a pig to sing. It wastes your time and annoys the pig. _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python