while True

Gerardo Juarez gerardo en computo-industrial.com.mx
Jue Nov 9 17:08:09 CET 2006


Interesante tu prueba. La duda que me surge es si, en el contexto real en 
el que correra tu programa, podrias detectar esta diferencia. Porque ya en 
el, tu programa correra con otros procesos, que tal vez le roben tiempo de 
CPU, ademas de latencia en la red, que despues de todo, es el eslabon mas 
debil de toda la construccion que tienes. Yo creo que las variaciones de 
rendimiento que obtendras de una corrida a otra son mayores que la 
diferencia de un tipo a otro de ciclo. 

En general, considerando que tu aplicacion hara muchas mas cosas que
recibir datos, las optimizaciones creo que estarian por otro lado, como,
por ejemplo, encontrar una forma de que la informacion a recibir sea la
menor posible. Por ejemplo, si tienes una capa de compresion en ambos
lados de la transmision, y dependiendo del contenido y volumen a
transmitir, puede ser la mejor opcion, aunque a nivel de simples ciclos
por segundo sea mucho mas lenta.

saludos
Gerardo


On Wed, 8 Nov 2006, tny wrote:

> El mar, 07-11-2006 a las 20:34 -0500, Arnau Sanchez escribi贸:
> > tny escribi贸:
> > 
> > >> while 1:
> > >>     l = s.recv(1024)
> > >>     if not l: break
> > >>     f.write(l)
> > > 
> > > disculpa pero de 茅ste modo haces el 2 comprobaciones de l por cada
> > > iteraci贸n, ser谩 m谩s pyt贸nico pero tambi茅n es m谩s ineficiente.
> > 
> > No te entiendo, "l" s贸lo se comprueba una vez por iteraci贸n, en el if. Como en 
> > algunas tipograf铆as estos caracteres se parecen mucho, quiz谩 hayas confudido la 
> > "l" (ele) con el "1" (uno). Por costumbre siempre uso "while 1", pero para que 
> > quede m谩s claro:
> > 
> > #while 1:
> > while True:
> > 	data = s.recv(1024)
> > 	if not data: break
> > 	f.write(data)
> > 
> > sobre la construcci贸n while/if/break:
> > 
> > http://www.python.org/doc/faq/es/general.html#por-qu-no-puedo-usar-una-asignaci-n-en-una-expresi-n
> 
> Pues s铆, es cierto que confund铆 'l' con '1', pero en definitiva es
> a帽adir una comprobaci贸n m谩s.
> Pero a煤n as铆 no me acaba de convencer.
> 
> Acepto que desde el punto de vista del desarrollo sea m谩s c贸modo y clara
> lo del 'while True:' pero punto de vista de la ejecuci贸n prefiero lo de
> 'x=loquesea\nwhile x:' 
> 
> Tal vez para enviar un archivo no tenga mucha importancia, pero si puedo
> escoger me quedo con la opci贸n m谩s r谩pida. 
> 
> Ejemplo.
> 
> >>> import time
> >>> def prueba1(iteraciones):
> ...     print time.ctime()
> ...     a=iteraciones
> ...     while a:
> ...             a-=1
> ...
> >>> def prueba2(iteraciones):
> ...     print time.ctime()
> ...     while True:
> ...             iteraciones-=1
> ...             if not iteraciones:
> ...                     break
> ...     print time.ctime()
> ...
> >>> prueba1(10000000)
> Wed Nov  8 23:21:54 2006
> Wed Nov  8 23:21:58 2006
> >>> prueba2(10000000)
> Wed Nov  8 23:22:04 2006
> Wed Nov  8 23:22:10 2006
> 
> prueba1 tardo 4 segundos
> prueba2 tardo 6 segundos
> 
> 
> No pretendo discutir por discutir, mi intenci贸n es que podamos aprender
> todos un poco, que me saqu茅is de mi error si estoy equivocado, y mostrar
> el verdadero camino de la serpiente si soy un iluminado del f贸sforo
> verde. XD
> 
> 
> 
> 




M醩 informaci髇 sobre la lista de distribuci髇 Python-es