pregunta sobre tiempo

tny a.porrua en gmail.com
Jue Mar 6 10:18:29 CET 2008


El mié, 05-03-2008 a las 15:55 -0800, punchik punchik escribió:
> hola amigos, soy novato en python. Estoy tratando de hacer una funcion la cual mande un mensaje cada determinado tiempo , por ejemplo que cada segundo escriba "hola" .
>    
>    lo primero que intente fue esto:
>   if (value == 1):
>  time.sleep(2)
>  print "hi"
>  time.sleep(2)
>  print "bye"
>    
>   el primer problema es que todo mi programa se para si uso time.sleep,  ademas de esto parece que lo anterios no funciona muy bien en mi computadora, ya que sucede algo muy extrano ,  no se si sera un comportamiento normal,  la cosa es que luego de que se ejecuta, pasan cuatro segundos y luego de eso se imprimen hi y bye simultaneamente, cuando deberia ser  primero se imprime hi y luego de dos segundos se imprime bye, alguien tiene idea de porque sucede esto?
>   alguien me recomendo usar sys.stdout.flush()  despues de cada print , el problema es que no funciona esto , en mi consola me sale esto:  AttributeError: 'module' object has no attribute 'flush'
>    
>   tambien he tratado hacer esto:
>    
>   if (value == 4):
>   for i in xrange(1, 100):
>    time.time()
>    time.sleep(0.4) 
>    print "hola"
>    
>    
>   pero tampoco funciona, osea no imprime hola cada 0.4 segundos 100 veces,  en vez de esto el resultado que obtengo es:  imprime 100 holas despues de 40 segundos. Alguien tiene idea de porque es esto?
>    
>   bueno y mi pregunta principal es como podria hacer  para mandar un determinado mensaje cada 2 segundos? sin que se pare mi programa?
>    
>    
>   muchas gracias.
>    
>   p.

Cada vez que haces un print se envía el texto al archivo stdout a través
de un buffer, que python vacía cuando cree conveniente o cuando se
llena.

Si necesitas expresamente que el print se vea de inmediato y no lo hace
por que es una de esas situaciones en que se pone tonto, lo que tienes
que hacer es trabajar directamente con el archivo stdout

from sys import stdout //importar stdout
for i in xrange(1, 100):
	time.sleep(1) 
	stdout.write(str(i)) //escribir en stdout
	stdout.flush()	//volcar el buffer

Para que el resto del programa no se te quede parado tienes que usar
hilos, o en vez de parar el programa con sleep, comprobar el tiempo en
cada vuelta del bucle principal de tu programa y lanzar para lanzar la
función cada x tiempo.

Yo de ti me miraba lo de los threads que no es tan difícil como parece y
te será útil en un futuro.


__________________________
estoy en http://infotny.es

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