curso
Función time.sleep() de Python
En este tutorial, conocerás la función de Python sleep()
que te permite introducir un retardo en la ejecución de tu programa. Es una función muy útil, sobre todo cuando tu programa trabaja con hilos o incluso cuando trabajas con gráficos y animaciones. La función dormir está disponible dentro del módulo time
que contiene muchas otras funciones que se ocupan del acceso al tiempo y de las conversiones. Y aunque este módulo está disponible en todas las plataformas, es posible que no todas las funciones que contiene estén disponibles o funcionen exactamente igual. Veamos el módulo time.sleep()
con más detalle...
Módulo Tiempo
Este módulo proporciona funciones que ayudan a manipular el tiempo y a utilizarlas en tu programa. Hay otros módulos "primos" que trabajan de forma más precisa con la fecha y el calendario dentro de tu sistema, pero este módulo se centra más en la manipulación del tiempo: trabaja con horas hasta llegar a los milisegundos.
Algunos de los términos que oirás generalmente cuando trabajes con el tiempo en el mundo de la informática es época.
Pero antes, asegúrate de importar el módulo de tiempo. Para ello sólo tienes que escribir
import time
época
Este es el punto preciso en el que el tiempo comenzó realmente. Esto no significa el nacimiento de nuestro sistema solar o cuando el hombre empezó realmente a medir el tiempo, pero en realidad está relativamente más cerca de ahora. Para el sistema UNIX, la época es el 1 de enero de 1970, 00:00:00 (UTC) (Era jueves por si te lo estabas preguntando...) Para averiguar la época en tu sistema puedes teclear:
time.gmtime(0)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
Esto te indicará el año (tm_year), el mes (tm_mon), el día (tm_mday), la hora (tm_hour), el minuto (tm_min) y el segundo (tm_sec). Junto con la semana del día (tm_wday) - es 3, ya que el lunes está marcado como el principio de la semana y se cuenta como 0. Luego le sigue el día del año (tm_yday), también conocido como día juliano. Y, por último, la bandera de horario de verano (tm_isdst): DST significa horario de verano. Este campo tiene valores 0, -1 ó 1. 0, si no está en vigor el horario de verano. 1, si el horario de verano está en vigor y finalmente -1, si la información no está disponible. ¿Por qué no está disponible, te preguntarás? Porque las normas del horario de verano están determinadas por la legislación local y pueden cambiar.
La mayoría de los ordenadores almacenan la hora y la fecha como una diferencia de segundos entre la fecha 1 de enero de 1970, 00:00:00 (UTC) y la hora que se va a almacenar. Así que, si sigues adelante y tecleas
time.time()
1548611182.872067
Esto te dirá los segundos que han pasado desde el 1 de enero de 1970, 00:00:00 (UTC). Esta diferencia es lo que llamamos marca de tiempo o tiempo de época UNIX, y tiene forma de número en coma flotante. Bueno... para ser honesto, la diferencia no es en términos de segundos sino de algo llamado ticks. En la mayoría de los sistemas UNIX, el reloj "hace tictac" entre 50 y 100 veces por segundo. Así, el tiempo de época UNIX es en realidad el número de ticks que se han producido desde el 1 de enero de 1970, 00:00:00 UTC.
Así que, ahora que ya tienes una idea de lo que hace el módulo de tiempo. Veamos la función sleep()
.
time.sleep()
En pocas palabras, el time.sleep()
toma como argumentos el número de segundos que quieres que el programa se detenga o se suspenda antes de avanzar al siguiente paso. Veámoslo con la ayuda de un programa sencillo, en el que simplemente imprimimos la hora actual con una pausa de 5 segundos entre la siguiente ejecución, introduciendo así una diferencia de 5 segundos entre cada impresión de la hora actual. Utilizar time.ctime()
ayuda a ver la hora local en una versión bien formateada.
for count in range(5):
print(time.ctime())
# Prints the current time with a five second difference
time.sleep(5)
Sun Jan 27 18:46:24 2019
Sun Jan 27 18:46:29 2019
Sun Jan 27 18:46:34 2019
Sun Jan 27 18:46:39 2019
Sun Jan 27 18:46:44 2019
La sintaxis de la función es: time.sleep(sec)
donde sec es el argumento que especifica el número de segundos durante los que se debe suspender el programa. La función no devuelve ningún valor.
seg - El argumento es en realidad un número en coma flotante, por lo que puedes hacer que el tiempo de sueño sea más preciso. Sin embargo, esto es un poco dudoso porque el tiempo de suspensión real puede ser inferior al tiempo solicitado o arbitrariamente superior. Para entender mejor por qué, imagina que el programa es un problema o una tarea de la que se ocupa otro vendedor en una tienda: cuando suspendes el programa, a la persona que trabaja en él se le asigna otro cliente inmediatamente. Pero poco después (antes de los segundos de suspensión especificados), otro vendedor libre retoma la tarea y pasa a completarla, por lo que el tiempo de suspensión puede ser menor. Del mismo modo, el tiempo de suspensión puede ser superior al solicitado en una cantidad arbitraria debido a la programación de tareas para todos los vendedores de la tienda, y por tanto el programa tiene que esperar su turno. Internamente, esto es más complejo, por supuesto, y ya se han introducido muchas formas de manejarlo.
for count in range(3):
print(time.ctime())
# Prints the current time with a five second difference
time.sleep(2.5)
Sun Jan 27 18:46:49 2019
Sun Jan 27 18:46:52 2019
Sun Jan 27 18:46:54 2019
Python no ofrece garantías sobre el comportamiento de estas llamadas a funciones, especialmente entre plataformas. La razón subyacente es que la mayoría de las funciones definidas en este módulo llaman a funciones de la biblioteca C de la plataforma con el mismo nombre. La precisión depende realmente de la precisión del sueño del sistema operativo subyacente y, si necesitas buscar más, te vendrá bien consultar la documentación de la plataforma, porque la semántica de estas funciones varía entre plataformas.
Sin embargo, hay buenas noticias: a partir de la versión 3.5 de Python, el time.sleep(secs)
ahora duerme al menos segs(argumento pasado) aunque el sueño se vea interrumpido por una señal (de nuevo, imagina que la señal es un vendedor como se ha comentado antes), excepto si el controlador de la señal lanza una excepción.
Entonces, ¿qué ocurre internamente al utilizar time.sleep()
?
Esta parte está pensada para que comprendas aún mejor la función, pero no es necesaria para que empieces a utilizar la función en sí. En realidad, la función utiliza el Reloj del Sistema, un dispositivo electrónico de un ordenador que emite una señal constante de alta frecuencia que sincroniza todos los componentes internos y que forma parte del procesador. Este módulo emite lo que se denomina Solicitudes de Interrupción (IRQ ) a intervalos programables. Las IRQ se encargan de interrumpir el código actual que está ejecutando el procesador, guardando el estado actual antes de pasar el control a otra pieza de código del sistema operativo.
Así pues, lo que hace la función sleep() es que llama a la rutina de finalización de E/S subyacente o a la llamada a procedimiento asíncrono para bloquear el proceso. El SO notará que no quieres hacer nada más hasta que se alcance un tiempo de espera. Así, una vez alcanzado este tiempo de espera, el SO reanudará tu proceso desde el último estado que recuerde. Y desde tu punto de vista se hizo una simple llamada a la función time.sleep()
.
Enhorabuena por dominar la función time.sleep()
. Asegúrate de consultar el curso de Data Science Toolbox (Parte 1) de Python de DataCamp para aprender más sobre las funciones en Python.
Más información sobre Python
curso
Introducción a la Ciencia de Datos en Python
curso