[Python] python threads, how to store results from a multithread code

Massimo Di Stefano massimodisasha a gmail.com
Sab 10 Dic 2011 15:47:15 CET


Ciao 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.

nella maggior parte dei casi tutti mi dicono che i thread siano "il male", a me pare che invece "risolvano problemi".

Il giorno Dec 10, 2011, alle ore 4:48 AM, enrico franchi ha scritto:

> d usare la libreria gevent e con essa riesco a salvare la suddetta lista … ma mi introduce ulteriori dipendenze
> (su linux nn sono un problema, ma su osx richiede di installare la libreria event da sorgente (non ho trovato binary), per poi installare gevent usando easy_install)
> 
>  
> brew install libevent 
> pip install gevent
> 
> Ci vanno tipo 5 minuti.
> 


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.

pensavo che … se la cosa potesse essere risolta con la libreria standard … "male non fosse"

comunque le dipendenze in un modo o nell'altro .. si risolvono.


> Poi lavorare a thread e fare i/o asincrono sono due soluzioni diversissime.
> Usare una o l'altra per una questione di pure dipendenze indica chiaramente che non hai bisogno ne dell'una ne dell'altra e puoi andare sequenziale. :)

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

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.

l'utilizzo di thread non da questo problema.


> 
> Scherzi a parte, da quello che ho capito la cosa che vorresti davvero sarebbe gevent.

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.


> Oltretutto da messaggi successivi sembra che tu non abbia minimamente idea dei problemi che devi affrontare e risolvere per usare i thread senza fare scoppiare tutto.
> 


il problema delle dipendenze era per facilitare l'utilizzo del codice ad utenti non consoni a compilazioni etc etc, 
ma come detto, quando il numero di link aumenta gevent resta indietro rispetto all'esempio fatto con thread ed aumentano le possibilità' che scoppi tutto.

riconosco che al 99.99% l'errore restituito da gevent sara' riconducibile ad una mia cattiva implementazione del codice, ma non ne esco :'(
magari un problema potrebbe essere l'utilizzo di urllib invece di urllib2  (negli esempi di gevent utilizzano urlib2)

l'errore restituito da gevent e' :

URLError: <urlopen error [Errno 67] request timed out>


log completo : [1]

[1] http://paste.debian.net/148798/


--epifanio



p.s.

sto uscendo scemo per cercare di capire come fare il "return" della lista generata nel codice di esempio che utilizza i thread … ok non sarà' la soluzione ottimale
ma ora e' una sfida per capire *come si fa* .. e per il momento sta vincendo lui … alla grande (3-0 … al primo tempo)

> -- 
> .
> ..: -enrico-
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python

-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20111210/26534e65/attachment.html>


Maggiori informazioni sulla lista Python