Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Desarrollo Última actualización: 25 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

Este tutorial le enseñará a utilizar la función sleep() del módulo de tiempo incorporado en Python para añadir retardos de tiempo al código.

Cuando ejecuta un programa Python simple, la ejecución del código ocurre secuencialmente -unasentencia tras otra- sin ningún retardo de tiempo. Sin embargo, puede que necesite retrasar la ejecución del código en algunos casos. La función sleep() del módulo de tiempo incorporado en Python le ayuda a hacerlo.

En este tutorial, aprenderá la sintaxis de uso de la función sleep( ) en Python y varios ejemplos para comprender cómo funciona. ¡Empecemos!

Sintaxis de la función time.sleep() de Python

El módulo timeintegrado en la biblioteca estándar de Python, proporciona varias funciones útiles relacionadas con el tiempo. Como primer paso, importe el módulo time a su entorno de trabajo:

import time

Como la función sleep () forma parte del módulo time, ahora puede acceder a ella y utilizarla con la siguiente sintaxis general:

time.sleep(n) 

Aquí, n es el número de segundos a dormir. Puede ser un número entero o un número de coma flotante.

A veces, el retardo requerido puede ser de unos pocos milisegundos. En estos casos, puede convertir la duración en milisegundos a segundos y utilizarla en la llamada a la función dormir. Por ejemplo, si desea introducir un retardo de 100 milisegundos, puede especificarlo como 0,1 segundo: time.sleep(0,1).

▶ También puede importar sólo la función sleep del módulo time:

from tiempo import dormir

Si utiliza el método anterior para importar, podrá llamar directamente a la función sleep() sin utilizar el tiempo .sleep().

Ahora que ha aprendido la sintaxis de la función dormir( ) de Python, vamos a codificar ejemplos para ver la función en acción. Puede descargar los scripts de Python utilizados en este tutorial de la carpeta python-sleep en este repositorio de GitHub. 👩🏽‍💻

Retrasar la ejecución de código con sleep()

Como primer ejemplo, utilicemos la función sleep para retrasar la ejecución de un sencillo programa Python.

Retraso en la ejecución del código

En el siguiente fragmento de código

  • La primera sentencia print( ) se ejecuta sin ningún retardo.
  • A continuación, introducimos un retardo de 5 segundos utilizando la función sleep( ).
  • La segunda sentencia print () se ejecutará sólo después de que finalice la operación sleep.
# /python-sleep/simple_example.py
import time

print("Imprimir ahora")
time.sleep(5)
print("Imprimir después de dormir 5 segundos")

Ejecute ahora el archivo simple_ejemplo .py y observe la salida:

$ python3 simple_ejemplo.py
YouTube vídeo

Añadir diferentes retardos a un bloque de código

En el ejemplo anterior, hemos introducido un retardo fijo de 5 segundos entre la ejecución de dos sentencias print(). A continuación, vamos a codificar otro ejemplo para introducir diferentes tiempos de retardo al recorrer un iterable.

En este ejemplo, nos gustaría hacer lo siguiente:

  • Recorrer en bucle una frase, acceder a cada palabra e imprimirla.
  • Después de imprimir cada palabra, nos gustaría esperar un tiempo determinado antes de imprimir la siguiente palabra de la frase.

Recorrer en bucle una cadena de cadenas

Considere la cadena, sentencia. Es una cadena en la que cada palabra es una cadena en sí misma.

Si hacemos un bucle a través de la cadena, obtendremos cada carácter, como se muestra:

>>> sentencia = "¿Cuánto tardará esto?"
>>> para char en sentencia:
... print(char)

# Salida (truncada para facilitar la lectura)
H
o
w
.
.
.
t
a
k
e
?

Pero esto no es lo que queremos. Nos gustaría recorrer la frase en bucle y acceder a cada palabra. Para ello, podemos llamar al método split( ) sobre la cadena de la frase. Esto devolverá una lista de cadenas -obtenida dividiendo la cadena de la sentencia- en todas las apariciones de espacios en blanco.

>>> sentence.split()
['¿Cuánto', 'tiempo', 'tardará', 'esto', 'tardará?']
>>> for word in sentence.split():
... print(word)

# Salida
¿Cuánto
tiempo
tardará
esto
?

Recorrer iterables con diferentes retardos

Volvamos al ejemplo:

  • sentencia es la cadena que queremos recorrer en bucle para acceder a cada palabra.
  • delay_times es la lista de tiempos de retardo que utilizaremos como argumento de la función sleep( ) durante cada pasada por el bucle.

Aquí nos gustaría recorrer simultáneamente dos listas: la lista delay_times y la lista de cadenas obtenidas al dividir la cadena de la frase. Puede utilizar la función zip( ) para realizar esta iteración paralela.

La función zip() de Python: zip(lista1, lista2) devuelve un iterador de tuplas, donde cada tupla contiene el elemento en el índice i en lista1 y lista2.

# /python-dormir/tiempos_dormir.py
import tiempo

tiempos_dormir = [3,4,1.5,2,0.75]
frase = "¿Cuánto tardará esto?"
para tiempos_dormir,palabra en zip(tiempos_dormir,frase.split()):
 print(palabra)
 tiempo.dormir(tiempos_dormir)

Sin la función dormir, el control pasaría inmediatamente a la siguiente iteración. Como hemos introducido un retardo, la siguiente pasada por el bucle se produce sólo después de que se complete la operación dormir.

Ejecutar ahora delay_times .py y observe la salida:

$ python3 retrasar_tiempos.py

Las siguientes palabras de la cadena se imprimirán tras un retardo. El retardo después de imprimir la palabra en el índice i de la cadena es el número en el índice i de la lista delay_times.

YouTube vídeo

Temporizador de cuenta atrás en Python

Como siguiente ejemplo, codifiquemos un sencillo temporizador de cuenta atrás en Python.

Temporizador de cuenta atrás en Python

Definimos una función countDown():

# /python-sleep/countdown.py
import time

def countDown(n):
 for i in range(n,-1,-1):
 if i==0:
 print("¡Listo para empezar!")
 else:
 print(i)
 time.sleep(1)

A continuación, analizaremos la definición de la función countDown():

  • La función toma un número n como argumento y realiza una cuenta atrás hasta cero partiendo de ese número n.
  • Utilizamos time.sleep(1) para conseguir un retardo de un segundo entre las cuentas.
  • Cuando la cuenta llega a 0, la función imprime "¡Listo para empezar!".

🎯 Para lograr la operación de cuenta atrás, hemos utilizado la función range() con un valor de paso negativo de -1. range(n, -1, -1) nos ayudará a recorrer en bucle el rango de números en n, n - 1, n - 2, y así sucesivamente hasta cero. Recordemos que el punto final se excluye por defecto cuando se utiliza la función rango ().

A continuación añadimos una llamada a la función countDown( ) con 5 como argumento.

countDown(5)

Ahora ejecute el script countdown. py ¡y vea la función countDown ¡en acción!

$ python3 countdown.py
YouTube vídeo

Función Sleep en multihilo

El módulo de hilos de Python ofrece capacidades de multihilo listas para usar. En Python, el Bloqueo Global del Intérprete o GIL asegura que sólo haya un hilo activo ejecutándose en cualquier momento.

python-sueño-3

Sin embargo, durante las operaciones de E/S y las operaciones de espera como sleep, el procesador puede suspender la ejecución del hilo actual y cambiar a otro hilo que esté esperando.

Para entender cómo funciona esto, pongamos un ejemplo.

Creación y ejecución de hilos en Python

Considere las siguientes funciones, func1(), func2() y func3(). Recorren en bucle un rango de números y los imprimen. A esto le sigue una operación de retardo -por un número específico de segundos- durante cada pasada por el bucle. Hemos utilizado diferentes tiempos de retardo para cada una de las funciones para comprender mejor cómo la ejecución cambia entre hilos de forma concurrente.

import time

def func1():
 for i in range(5):
 print(f "Ejecutando t1, imprimir {i}.")
 time.sleep(2)

def func2():
 for i in range(5):
 print(f "Ejecutando t2, imprimir {i}.")
 time.sleep(1)


def func3():
 for i in range(4):
 print(f "Ejecutando t3, imprimir {i}.")
 time.sleep(0.5)

En Python, puede utilizar el constructor Thread () para instanciar un objeto hilo. Utilizando la sintaxis threading.Thread(target = ..., args = ...) crea un hilo que ejecuta la función target con el argumento especificado en la tupla args.

En este ejemplo las funciones, func1, func2, y func3, no reciben ningún argumento. Por tanto, basta con especificar únicamente el nombre de la función como objetivo. A continuación, definimos objetos hilo, t1, t2 y t3 con func1, func2 y func3 como objetivos, respectivamente.

t1 = threading.Thread(target=func1)
t2 = threading.Thread(target=func2)
t3 = threading.Thread(target=func3)

t1.start()
t2.start()
t3.start()

Aquí está el código completo para el ejemplo de roscado:

# /python-sleep/threads.py
import time
import threading

def func1():
 for i in range(5):
 print(f "Ejecutando t1, imprima {i}.")
 time.sleep(2)

def func2():
 for i in range(5):
 print(f "Ejecutando t2, imprima {i}.")
 time.sleep(1)

def func3():
 for i in range(4):
 print(f "Ejecutando t3, imprimir {i}.")
 time.sleep(0.5)

t1 = threading.Thread(target=func1)
t2 = threading.Thread(target=func2)
t3 = threading.Thread(target=func3)

t1.start()
t2.start()
t3.start()

Observe la salida. La ejecución se altera entre los tres hilos. El hilo t3 tiene el menor tiempo de espera, por lo que se suspende durante el menor tiempo. El hilo t1 tiene el mayor tiempo de espera de dos segundos, por lo que es el último hilo en terminar la ejecución.

YouTube vídeo

Para saber más, lea el tutorial sobre los fundamentos del multihilo en Python.

Conclusión

En este tutorial, ha aprendido a utilizar la función dormir ( ) de Python para añadir retardos de tiempo al código.

Puede acceder a la función sleep( ) desde el módulo de tiempo incorporado, time.sleep(). Para retrasar la ejecución n segundos, utilice tiempo .sleep(n). Además, ha visto ejemplos de retrasar iteraciones posteriores en un bucle por diferentes valores, cuenta atrás y multihilo.

Ahora puede explorar las capacidades más avanzadas del módulo time. ¿Quiere trabajar con fechas y horas en Python? Además del módulo de tiempo, puede aprovechar la funcionalidad de los módulos datetime y calendar.

A continuación, aprenda a calcular la diferencia horaria en Python.⏰

  • Bala Priya C
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre desarrollo
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder