Re: [Python] Pararelizzare due loop

2012-01-08 Per discussione Alessandro Agosto
Il giorno 05 gennaio 2012 15:56, Matteo Boscolo  ha scritto:

> ciao a tutti,
> ho questa funzioncina dentro una classe .
>

Ma come, nessuno l'ha corretto?
Si chiama metodo :-)

Non voglio rendere inutile questo mio commento (e spero proprio che nessuno
l'abbia corretto perchè ho letto le risposte saltuariamente), quindi voglio
fornirti uno spunto per capire meglio il concetto. In termini più generici
non basta spawnare processi o lanciare thread per migliorare i tempi di
esecuzione o far scalare l'applicativo, vedi la legge di Amdahl per
maggiori informazioni, se proprio ti interessa l'argomento in modo
approfondito. Se non fosse questo il caso lascia perdere e questo mio
commento sarà totalmente inutile.

Non basta dire "voglio dimezzare i tempi, eseguo due processi/thread" per
ottenere il risultato sperato. Seguendo i consigli degli altri potrai
ottenere molto di più.

Il giorno 06 gennaio 2012 12:03, Daniele Maccio
ha scritto:
>"Premature optimization is the root of all evil"
> http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize

+1
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Pararelizzare due loop

2012-01-07 Per discussione enrico franchi
2012/1/5 Matteo Boscolo :

> vorrei qualche suggerimento su come parallelizzare i due cicli in modo da
> rendere più efficiente e veloce questa funzione ..

Non farlo.


>  def _updateSolver(self,r):
>        """
>            internal function for solver updating
>        """
>        for p in r.parameters.values():
>            self._ruleSolver.addParameter(p.name, p.value)
>        for f in r.functions.values():
>            self._ruleSolver.addFunction(f.name, f.value)

L'unica cosa "innocua" e sensata che vedo qui e' usare strutture dati
appropriate.
Dai metodi, mi sembra che parameters e functions siano dizionari. Non
so cosa siano le chiavi.

Dopo di che chiami addParameter e addFunction, "spezzando" oggetto che
sembra una coppia.
E qualcosa mi dice che vai a mettere il tutto dentro un dizionario.

A me sembra che questo sia un caso in cui la programmazione ad oggetti
stia facendo dei danni.

Il modo piu' rapido per aggiungere valori ad un dizionario a partire
da un altro dizionario e' chiamare update e dimenticarsi del resto.


A margine, se questa cosa e' quello che penso io, l'unico modo di
andare veloce e' avere buone regole di taglio e buona propagazione.


-- 
.
..: -enrico-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Pararelizzare due loop

2012-01-06 Per discussione Daniele Maccio
"Premature optimization is the root of all evil"

http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize

Il 06 gennaio 2012 10:51, Giovanni Porcari
 ha scritto:
>
> Il giorno 05/gen/2012, alle ore 19:09, Giovanni Porcari ha scritto:
>
>>> Supponi di avere due liste da 1.000.000 di elementi ..
>>> ciclo per un milione
>>> e poi per un altro milione
>>>
>>> se pararelellizzo  dovrei se non dimezzare almeno ridurre il tempo di 
>>> esecuzione .. che dite ??
>>> Tenete presente che giro so w$
>>
>>
>> Supponi di avere due pile di piatti da lavare da 1.000 piatti ciascuna uno 
>> sguattero
>> e un lavello. Se lava 1 piatto al secondo in 2000 secondi ha finito.
>> Poi immagina di avere due sguatteri ma sempre un solo lavello.
>>
>> Quanto scommetti che il tempo finale è maggiore di 2000 secondi ?
>
> Andrea ha detto che se fai molto I/O ha senso parallelizzare.
>
> Nell'esempio se le 2 pile di piatti fossero in due stanze diverse
> dalla cucina e i poveri sguatteri fossero costretti a correre
> a prendere un piatto per volta allora anche con un solo lavello
> due sguatteri (threads) farebbero prima che uno solo.
> Ma solo perchè uno sguattero sfrutterebbe il tempo morto
> dell'altro che corre a prendere il prossimo piatto.
>
> G
> ___
> Python mailing list
> Python@lists.python.it
> http://lists.python.it/mailman/listinfo/python
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Pararelizzare due loop

2012-01-06 Per discussione Giovanni Porcari

Il giorno 05/gen/2012, alle ore 19:09, Giovanni Porcari ha scritto:

>> Supponi di avere due liste da 1.000.000 di elementi ..
>> ciclo per un milione
>> e poi per un altro milione
>> 
>> se pararelellizzo  dovrei se non dimezzare almeno ridurre il tempo di 
>> esecuzione .. che dite ??
>> Tenete presente che giro so w$
> 
> 
> Supponi di avere due pile di piatti da lavare da 1.000 piatti ciascuna uno 
> sguattero
> e un lavello. Se lava 1 piatto al secondo in 2000 secondi ha finito.
> Poi immagina di avere due sguatteri ma sempre un solo lavello.
> 
> Quanto scommetti che il tempo finale è maggiore di 2000 secondi ?

Andrea ha detto che se fai molto I/O ha senso parallelizzare. 

Nell'esempio se le 2 pile di piatti fossero in due stanze diverse
dalla cucina e i poveri sguatteri fossero costretti a correre 
a prendere un piatto per volta allora anche con un solo lavello
due sguatteri (threads) farebbero prima che uno solo.
Ma solo perchè uno sguattero sfrutterebbe il tempo morto
dell'altro che corre a prendere il prossimo piatto.

G
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Pararelizzare due loop

2012-01-05 Per discussione Andrea Francia
2012/1/5 Matteo Boscolo 

> Supponi di avere due liste da 1.000.000 di elementi ..
> ciclo per un milione
> e poi per un altro milione
>
> se pararelellizzo  dovrei se non dimezzare almeno ridurre il tempo di
> esecuzione .. che dite ??


1) Che e' molto facile rallentare il codice nel tentativo di velocizzarlo
con le micro-ottimizzazioni.
2) Che e' piu' facile ottimizzare quando il codice e leggibile e che le
micro-ottimizzazioni rendeno il codice poco leggibile.
3) Che ha volte ha molto senso parallelizzare tasks che fanno tanto I/O.
4) Che solo proprio in alcuni casi il tempo della macchina e' piu' prezioso
di quello del programmatore.
5) Che in genere il programma passa la maggior parte del tempo in una
piccola parte di codice. Le misure sono essenziali per trovarla.
6) Spesso c'e' sempre tempo per ottimizzare piu' tardi.

Ciao
-- 
Andrea Francia http://www.andreafrancia.it
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Pararelizzare due loop

2012-01-05 Per discussione Giovanni Porcari

Il giorno 05/gen/2012, alle ore 19:11, Marco Beri ha scritto:

> Sarà anche come dici, ma io sono sicuro che se prendi 9 mamme un bambino 
> viene fuori in un mese...

Si ma ci vogliono anche 9 papà ?

Perchè in tal caso la mamma si diverte di più ;)

G
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Pararelizzare due loop

2012-01-05 Per discussione Marco Beri
2012/1/5 Giovanni Porcari 

> Supponi di avere due pile di piatti da lavare da 1.000 piatti ciascuna uno
> sguattero
> e un lavello. Se lava 1 piatto al secondo in 2000 secondi ha finito.
> Poi immagina di avere due sguatteri ma sempre un solo lavello.
> Quanto scommetti che il tempo finale è maggiore di 2000 secondi ?
>

Sarà anche come dici, ma io sono sicuro che se prendi 9 mamme un bambino
viene fuori in un mese...
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Pararelizzare due loop

2012-01-05 Per discussione Giovanni Porcari

Il giorno 05/gen/2012, alle ore 18:00, Matteo Boscolo ha scritto:

> Supponi di avere due liste da 1.000.000 di elementi ..
> ciclo per un milione
> e poi per un altro milione
> 
> se pararelellizzo  dovrei se non dimezzare almeno ridurre il tempo di 
> esecuzione .. che dite ??
> Tenete presente che giro so w$


Supponi di avere due pile di piatti da lavare da 1.000 piatti ciascuna uno 
sguattero
e un lavello. Se lava 1 piatto al secondo in 2000 secondi ha finito.
Poi immagina di avere due sguatteri ma sempre un solo lavello.

Quanto scommetti che il tempo finale è maggiore di 2000 secondi ?

;)

G



___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Pararelizzare due loop

2012-01-05 Per discussione Marco De Paoli
condivido i dubbi degli altri sul fatto che i thread non siano un grande
aiuto nel tuo caso
ad ogni modo segnalo questo
http://eli.thegreenplace.net/2011/12/27/python-threads-communication-and-stopping/
mi sembra ben fatto

Marco
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Pararelizzare due loop

2012-01-05 Per discussione Matteo Boscolo

Il 05/01/2012 17:48, Giovanni Porcari ha scritto:

Il giorno 05/gen/2012, alle ore 15:56, Matteo Boscolo ha scritto:


vorrei qualche suggerimento su come parallelizzare i due cicli in modo da 
rendere più efficiente e veloce questa funzione ..

Ma sei sicuro che alla fine sia più 'efficiente e veloce' ?
Cioè, cosa ti dà la certezza che non sia il contrario ?


G
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python



Supponi di avere due liste da 1.000.000 di elementi ..
ciclo per un milione
e poi per un altro milione

se pararelellizzo  dovrei se non dimezzare almeno ridurre il tempo di 
esecuzione .. che dite ??

Tenete presente che giro so w$

ciao
Matteo



___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Pararelizzare due loop

2012-01-05 Per discussione Giovanni Porcari

Il giorno 05/gen/2012, alle ore 15:56, Matteo Boscolo ha scritto:

> vorrei qualche suggerimento su come parallelizzare i due cicli in modo da 
> rendere più efficiente e veloce questa funzione ..

Ma sei sicuro che alla fine sia più 'efficiente e veloce' ?
Cioè, cosa ti dà la certezza che non sia il contrario ?


G
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Pararelizzare due loop

2012-01-05 Per discussione Matteo Boscolo

Il 05/01/2012 17:08, Andrea Francia ha scritto:


Scusa se ti faccio una contro-domanda.

Come mai vuoi ottimizzare questa funzione? Hai problemi di performance?
attualmente no.. ma vorrei ottimizzare al meglio questo processo perché 
potrebbe frullare un bel po

Hai gia' verificato dove si trova il collo di bottiglia?

Te lo chiedo perche' a giudicare dal nome dei metodi non sembrano 
operazioni molto onerose.


non sono cose onerose ma potrebbero essere tante .. quindi se riesco a 
pararelizzare la cosa e' meglio


Grazie mille
Matteo

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Pararelizzare due loop

2012-01-05 Per discussione Andrea Francia
2012/1/5 Matteo Boscolo 

> ciao a tutti,
> ho questa funzioncina dentro una classe .
>
> vorrei qualche suggerimento su come parallelizzare i due cicli in modo da
> rendere più efficiente e veloce questa funzione ..
>

Scusa se ti faccio una contro-domanda.

Come mai vuoi ottimizzare questa funzione? Hai problemi di performance?
Hai gia' verificato dove si trova il collo di bottiglia?

Te lo chiedo perche' a giudicare dal nome dei metodi non sembrano
operazioni molto onerose.

Ciao
-- 
Andrea Francia http://www.andreafrancia.it
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Pararelizzare due loop

2012-01-05 Per discussione Matteo Boscolo

ciao a tutti,
ho questa funzioncina dentro una classe .

vorrei qualche suggerimento su come parallelizzare i due cicli in modo 
da rendere più efficiente e veloce questa funzione ..


le dimensioni del r.parameters e r.functions sono differenti ..

grazie mille

ciao,
Matteo

 def _updateSolver(self,r):
"""
internal function for solver updating
"""
for p in r.parameters.values():
self._ruleSolver.addParameter(p.name, p.value)
for f in r.functions.values():
self._ruleSolver.addFunction(f.name, f.value)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python