range y uso excesivo de memoria
Miuler
miuler en gmail.com
Mie Feb 27 03:22:04 CET 2008
mmm.. ahora me encuentro con xrange, al parecer es la mejor opción:
def repeat2(num):
for i in xrange(num):
a = i+i
In [38]: t1 = time.time();jo=repeat2(50000000);t2 = time.time();print t2-t1
11.0853869915
tiene la ventaja de ser tan rapido como range, y sin su desventaja de uso
excesivo de memoria.
Alguien tiene más comentarios?
2008/2/26 Miuler <miuler en gmail.com>:
> Hola de nuevo, encontré una cosa interesante, y es que si hago uso de for
> uno dentro de otro para llegar a la misma cantidad, el uso de memoria, no se
> ve afectado:
>
> def func3():
> u=0
> for i in range(1000):
> for j in range(1000):
> for k in range(50):
> a = k+k
> u+=1
> return u
>
> In [30]: t1 = time.time();jo=func3();t2 = time.time();print t2-t1
> 16.3279149532
>
> In [31]: jo
> Out[31]: 50000000
>
>
> 2008/2/26 Hector Miuler Malpica Gallegos <miuler en gmail.com>:
>
> Hola amigos, tengo una duda, yo tengo la siguiente función en mi
> > python2.5 (ubuntu 8.04) (para ser más exactos uso ipython 0.8.1-2)
> >
> > def repeat2(num):
> > for i in range(num):
> > i = i+i
> >
> > def repeat1(num):
> > i=0
> > while i <= num:
> > i = i+i
> > i += 1
> >
> >
> > Ejecutando las funciones obtengo el siguiente resultado:
> >
> > In [11]: t1 = time.time();repeat1(50000000);t2 = time.time();print t2-t1
> > 17.0249400139
> >
> > In [12]: t1 = time.time();repeat2(50000000);t2 = time.time();print t2-t1
> > 11.1878969669
> >
> > In [13]: t1 = time.time();repeat1(50000000);t2 = time.time();print t2-t1
> > 16.5229768753
> >
> > In [14]: t1 = time.time();repeat2(50000000);t2 = time.time();print t2-t1
> > 10.8672430515
> >
> >
> > en la función que uso range el tiempo es considerablemente menor, pero
> > es uso de memoria es enorme,
> > a tal punto de casi saturar mi memoria, y al terminar la ejecución
> > prácticamente no libera nada de nada, claro la segunda vez ya no sigue
> > aumentando al final el ipython queda con:
> >
> >
> > PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND
> > 10401 pts/1 S+ 0:39 0 987 600112 598004 38.4/usr/bin/python /usr/bin/ipython
> >
> > usa más de 580M de ram,
> >
> > he tratado de usar gc.collect() y no libera nada, luego haciendo una
> > prueba solo con range(50000000) ocurre lo mismo ocupa mucha memoria, como
> > puedo hacer para liberar esa memoria????
> >
> > *que es lo recomendable? el uso de while? pero demora mucho, el uso de
> > range? pero consume mucha memoria y no se como liberarla*
> >
> >
> >
> > --
> > Hector Miuler Malpica Gallegos <miuler en gmail.com>
> >
>
>
>
> --
> _\|/_
> (O-O)
> --oOO-(_)-OOo----------------------------------------
> Hector Miuler Malpica Gallegos
> Universidad Nacional del Callao - Peru
> Escuela de Ingenieria Electronica
>
> usuario registrado #308608
--
_\|/_
(O-O)
--oOO-(_)-OOo----------------------------------------
Hector Miuler Malpica Gallegos
Universidad Nacional del Callao - Peru
Escuela de Ingenieria Electronica
usuario registrado #308608
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es