da l3on4rdo » venerdì 3 febbraio 2012, 14:42
A meno di non dover eseguire lo script a un ritmo forsennato (parecchie volte al secondo, per dire) dal punto di vista dell'efficienza le due soluzioni si (circa) equivalgono.
Crea un file in questo modo:
- Codice: Seleziona tutto
l3on4rdo@l3on4rdo-laptop:~/Scrivania$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> outFile = open('filone.txt', 'w')
>>> output = '1 2 3 4 5 6 7 8 9 10'
>>> for i in range(100000):
... outFile.write(output + '\n')
...
>>> outFile.close()
Poi processalo nei due modi, e ti accorgi che:
- Codice: Seleziona tutto
l3on4rdo@l3on4rdo-laptop:~/Scrivania$ time while read line; do echo "ciao" ; done < filone.txt
...
real 0m1.961s
user 0m1.460s
sys 0m0.380s
mentre:
- Codice: Seleziona tutto
l3on4rdo@l3on4rdo-laptop:~/Scrivania$ time cat filone.txt | while read line; do echo "ciao" ; done
...
real 0m2.363s
user 0m1.410s
sys 0m0.900s
Dipende tutto da quello che intendi per "circa"

edit:
manca un pezzo del mio ragionamento, che aggiungo ora.
Se aumenti di dieci volte il numero di righe del file, ovvero passi da 100000 a 1000000 di righe, la differenza nel tempo di esecuzione dello script non resta costante, ma aumenta.
- Codice: Seleziona tutto
l3on4rdo@l3on4rdo-laptop:~/Scrivania$ time while read line; do echo "ciao" ; done < filone2.txt
...
real 0m17.946s
user 0m14.450s
sys 0m3.410s
e
l3on4rdo@l3on4rdo-laptop:~/Scrivania$ time cat filone2.txt | while read line; do echo "ciao" ; done
...
real 0m23.120s
user 0m15.160s
sys 0m7.650s
Ultima modifica di
l3on4rdo il venerdì 3 febbraio 2012, 19:14, modificato 1 volta in totale.
Come da regolamento, UNA DISCUSSIONE, PER OGNI PROBLEMA, DOPO aver verificato, con UNA RICERCA, che non sia stato già trattato.
E, prima di sparire con la soluzione, ricorda di mettere [Risolto] nel titolo del primo messaggio della discussione.
La vendetta è un piatto da consumare freddo. Per questo hanno inventato il freezer.