Il giorno Dec 10, 2011, alle ore 12:51 PM, enrico franchi ha scritto:
> 2011/12/10 Massimo Di Stefano <massimodisa...@gmail.com> > Ciao Henryx, > > Credo che tu ti stia confondendo con un mio omonimo. Scusami per la confusione, non me ne voglia il vero Henryx ;) > > > premetto che tutto quello che so di computer e python … l'ho imparato grazie > a voi (comunità') > purtroppo non ho studiato informatica e di sicuro ho tutto da imparare da > questa discussione. > > Non ho esperienza tale da capire come funzionano i thread, ho difficoltà' a > capire come funzionano i look e metodi associati ad esso, cosa sia una queue > e come la si usa > sto provando ad imparare … autodidatta, ma ci sto provando. > > Dai pero' almeno i lock chiamali con i loro nomi! In due post non hai manco > azzeccato il nome :P bold(:-P) > > > nella maggior parte dei casi tutti mi dicono che i thread siano "il male", a > me pare che invece "risolvano problemi". > > Risolvono problemi. Ma ne creano piu' di quelli che risolvono. Per esempio, > finche' non capisci *bene* come usare i lock stai facendo l'equivalente > computeristico di buttarti in un incrocio senza guadare se arriva qualcuno. > prima o poi ciocchi. qui la mia ignoranza regna sovrana .. per ora ho visto che invece di 50 secondi, il download e processing dei singoli file di testo termina in 4 secondi. da quanto ho capito le operazioni effettuate dai threads nel mio caso sono indipendenti l'una dall'altra, il ciocco potrebbe avvenire server side per un overload di richieste di download forse ? in questo caso farei bene ad aggiungere un check per controllare se il file scaricato contiene effettivamente i dati … (maybe) > > vero se decido di usare brew, port fink o altro > quindi un potenziale user sarebbe "costretto" > ad installarsi xcode, brew (ottimo) .. o altro port/fink rtc etc ... > certo non e' la fine del mondo, ma … di sicuro non e' la soluzione ottimale > se devo far usare lo script a terze persone. > > Questo e' in essenza un falso problema. Male che vada dai due botte di > pyinstaller. > Altrimenti specifichi le dipendenze e se uno vuole usare un software se le > scarica. I miracoli non li puoi fare. su osx il problema grosso e Xcode … e' immenso e richiede registrazione, un'alternativa potrebbe essere : https://github.com/kennethreitz/osx-gcc-installer ma non l'ho mai provato > > un altro problema riscontrato sone errori e velocita' > quando il numero di file da scaricare (sono tutti di pochi kbyte) > aumenta, thread si prende un bel margine se comparato con gevent. > nei test che sto provando i file sono 25 > thread per leggere scaricare e processare i file di testo ci mette circa 5 > secondi, gevent 18 > > Tutto questo e' controintuitivo. Mi sarei aspettato il contrario. non so che dirti .. provare per credere ? > > ma il problema più grande e' che gevent una volta su 10 mi da un I/O error > penso sia dovuto alla rete (per fare i test ho dovuto fermare il download di > alcuni torrent che mi saturavano la banda) > cosi' facendo gli errori sono diminuiti .. ma non scomparsi. > > Ho un'idea sul perche': direi che la libreria di torrent non "gioca carino". > Bisognerebbe andare dentro a vedere. > > l'utilizzo di thread non da questo problema. > > > Mancano dettagli specifici. Se ti va bene, sei praticamente in shared nothing > e non dovresti avere problemi con i threads. Mi aspetterei tuttavia delle > performance non particolarmente superiori al caso sequenziale. scaricare sequenzialmente for i in mylink list download and save i impiega 40 secondi circa usando i threads 4 secondi e mezzo io ci vedo u a differenza enorme 10x > > ho scoperto gevent da 2 giorni grazie a tyrion-mx [grazie!] > sto leggendo la documentazione, e' davvero bello e non ne sapevo l'esistenza > … le coroutine sembrano qualcosa di magico. > > Non lo sono, in realta'. E' molto simile a come ciascuno di noi gestisce la > concorrenza. > E' anche intuitivo: sai fare tante cose insieme una per volta. Ma se non ti > interrompi ogni tanto, non le fai tutte insieme, ma vai avanti a farne sempre > una. l'universo della programmazione e' semplicemente affascinante! preso da un atroce dubbio .. ho provato a lanciare lo stesso identico codice [1] da dentro ipython … invece di usare mela+r in textmate (un editor per osx) e magicamente tutto funziona … >>> from testthread import download >>> lista = [] >>> sitecodelist = ["01046500", "01018500", "01010500", "01034500", "01059000", >>> "01066000", "01100000"] >>> for k in sitecodelist: ... get_data = download(k,lista) ... get_data.start() ... >>> loaded Monthly data for sitecode : 01010500 loaded Monthly data for sitecode : 01018500 loaded Monthly data for sitecode : 01046500 loaded Monthly data for sitecode : 01059000 loaded Monthly data for sitecode : 01100000 loaded Monthly data for sitecode : 01066000 loaded Monthly data for sitecode : 01034500 >>> lista ['/var/folders/sg/gwygncln7zj2dv1s6dmrkjj40000gn/T/tmpsPY8tT', '/var/folders/sg/gwygncln7zj2dv1s6dmrkjj40000gn/T/tmpNwHBiy', '/var/folders/sg/gwygncln7zj2dv1s6dmrkjj40000gn/T/tmpiYW1EQ', '/var/folders/sg/gwygncln7zj2dv1s6dmrkjj40000gn/T/tmp9P3VfF', '/var/folders/sg/gwygncln7zj2dv1s6dmrkjj40000gn/T/tmp46hdX3', '/var/folders/sg/gwygncln7zj2dv1s6dmrkjj40000gn/T/tmpofXc5Q', '/var/folders/sg/gwygncln7zj2dv1s6dmrkjj40000gn/T/tmphtpLrm'] >>> ora sono felice … ma perplesso - Massimo [1] # testthread.py # import threading import urllib from tempfile import NamedTemporaryFile class download(threading.Thread): def __init__(self, sitecode, lista): threading.Thread.__init__(self) self.sitecode = sitecode self.status = -1 self.lista = lista def run(self): url = "http://waterdata.usgs.gov/nwis/monthly?referred_module=sw&site_no=" url += self.sitecode url += "&PARAmeter_cd=00060&partial_periods=on&format=rdb&submitted_form=parameter_selection_list" tmp = NamedTemporaryFile(delete=False) urllib.urlretrieve(url, tmp.name) print "loaded Monthly data for sitecode : ", self.sitecode self.lista.append(tmp.name)
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python