Python 3.8 | Python 3.10.4
Hola a todos
Al importar el Módulo time, para utilizar el Método sleep(), el siguiente Código ejecuta después de 9 segundos los 3 Métodos una a continuación de otra, es decir, no se hace ninguna pausa entre Método y Método, como era de esperarse.
import time
Metodo1()
time.sleep(3)
Metodo2()
time.sleep(3)
Metodo3()
time.sleep(3)
1° ¿Por qué se juntan los tiempos de los 3 llamados a sleep, generando una pausa de 9 segundos en lugar de 3 pausas de 3 segundos cada una?
2° ¿Cómo lograr realizar una pausa de un intervalo de tiempo entre instrucción e instrucción?
Desde ya Muchísimas Gracias
Creeria que hay mas en el codigo que da problemas que lo que muestra tu codigo.
En python 3.8 si corro
import time
print(time.time())
time.sleep(3)
print(time.time())
time.sleep(3)
print(time.time())
time.sleep(3)
me saca
1650890766.2946036
1650890769.2962036
1650890772.2988038
Fijate que el numero aumenta aproximadamente 3 unidades en cada llamada, que es lo esperado porque time.time entrega segundos. Y se siente como tres segundos entre llamadas.
Que pasa si corres este script en tu maquina?
Muchas Gracias ccanepa
Efectivamente, tienes razón.
Al final de cada print, se agrega end=""
1° ¿Por qué este parámetro genera este error?
2° ¿Cómo evitar el Salto de Línea de cada print y mantener la pausa de 3 segundos?
Desde ya Muchísimas Gracias
El end= le dice al print que caracter colocar despues de todo lo otro que esta en el print; si no pones “end=” se asume que es “\n”, salto de linea.
En tu ultimo comentario usas end="", el str vacio asi que va a imprimir todo pegado.
Para poder leer mejor si pones end = " " va a poner un espacio al final de cada print.
Si reemplazas en el codigo que yo mandè, la salida es ahora
1650911295.3981173 1650911298.4089172 1650911301.4197173
Si lo corro como un script en una consola cmd de windows, se ve que por 9 segundos no saca nada y luego aparece toda la linea.
Si la corres desde una consola de IDLE en windows, se ven aparecer las diferentes partes cada tres segundos.
Fijate que los tiempos impresos estan separados por tres unidades, asi que time.sleep trabaja como se espera.
El tema de aparecer o no todo junto es que print escribe a un buffer, y en determinados momentos le pasa la salida a stdout; dependiendo de quien sea stdout puede decidir no mostrar caracteres hasta no ver un fin de linea, “\n”
Se puede solucionar agregando flush=True en el print, probá
Excelente ccanepa
Sos un Groso.
Ahora,
1° ¿Por qué se produce ese doble comportamiento de print?
Lo último: Te lo consulto a vos porque viste que la Documentación Oficial de Python normalmente es muy escueta, sucinta.
2° ¿Qué hace exactamente flush?
Desde ya Muchísimas Gracias
Hola!
No es un diferente comportamiento de print
en sí, sino del subsistema que maneja el mostrar cosas por la terminal en cada contexto.
Cuando print
manda algo “a la pantallla”,en realidad no va a “la pantalla” sino que lo manejan distintas capas del entorno (sistema operativo, etc).
Como decía Claudio, esas capas tienen bufferes que “juntan” algo de info antes de mandarla a pantalla (por performance, si mandaran a pantalla letra por letra lo que reciben, sería todo muy lento). Por eso, esperan a que llegue un fin de linea. Pero si no mandás un fin de linea, se queda esperando que llegue una antes de mandar las cosas a pantalla, y por eso no ves enseguida lo que mandaste.
A MENOS que hagas un flush
, que lo que hace es decirle a esas capas intermedias que “manden todo lo que tienen ahorita sin importar si es poco o mucho”.
1 me gusta