Iniciar sesión
Iniciar sesión

Cómo usar time.sleep() en Python

Cómo usar time.sleep() en Python
Hostman Team
Redactor técnico
Programación en Python
14.10.2025
Reading time: 8 min

A veces, al ejecutar un programa, es necesario hacer una pausa: esperar a que se carguen los datos, dar tiempo al usuario para introducir información o reducir la carga del sistema. Una de las formas más sencillas de hacerlo en Python es mediante la función time.sleep(), que suspende la ejecución del programa durante un intervalo determinado.

En este artículo veremos cómo funciona time.sleep() en Python, sus características y alternativas, los posibles errores y cuándo conviene usarlo en programas multihilo o asíncronos, así como cuándo es mejor elegir asyncio.sleep() u otros mecanismos de espera.

¿Qué es la función sleep() en Python?

La función sleep() se añadió a la biblioteca estándar de Python para simplificar la creación de pausas en el código. Forma parte del módulo time y se invoca como time.sleep(), lo que permite pausar la ejecución del programa durante un número específico de segundos.

En la práctica, sleep() es útil en entornos de prueba, para introducir pausas entre solicitudes de API o intervalos entre mensajes. Sin embargo, no debe confundirse con herramientas de sincronización de hilos o tareas de temporización precisa: si necesitas coordinar tareas o I/O asíncrono, hay soluciones más adecuadas.

Cómo funciona time.sleep()

La función time.sleep() pausa el hilo actual durante el número de segundos indicado. En un programa multihilo, los demás hilos continúan ejecutándose, mientras que el hilo donde se invoca time.sleep() queda “congelado” por ese intervalo.

Es importante tener en cuenta que time.sleep() bloquea la ejecución del código en ese punto, retrasando todas las operaciones posteriores. Ignorar esto puede reducir el rendimiento o incluso congelar la interfaz de usuario en aplicaciones de escritorio.

Cuándo se usa time.sleep()

La función time.sleep() se utiliza con frecuencia durante pruebas o depuración, cuando se necesita una breve pausa, por ejemplo, para verificar una respuesta de API o esperar una contestación del servidor. También se usa para que los scripts se ejecuten paso a paso, permitiendo que el usuario vea información o introduzca datos.

En demostraciones, tutoriales y prototipos, time.sleep() ayuda a simular procesos largos, y al trabajar con servicios externos, permite evitar bloqueos por exceso de solicitudes. Sin embargo, no es la única forma de ralentizar el código; existen varias alternativas que veremos a continuación.

Cómo usar time.sleep() en Python

Usar time.sleep() en Python es muy sencillo, y los principiantes la dominan rápidamente. Aun así, es importante conocer ciertos matices, ya que pueden afectar al rendimiento y a la facilidad de depuración.

Sintaxis básica

Para usar time.sleep(), primero debes importar el módulo time:

import time
time.sleep(5)

En este ejemplo, el programa “dormirá” durante 5 segundos. El número pasado a la función puede ser entero o decimal, lo que permite usar fracciones de segundo.

Sintaxis:

time.sleep(seconds)

La función no devuelve ningún valor. Solo suspende el hilo actual durante el tiempo indicado.

Ejemplo: retrasar la ejecución del código

Supón que tienes un pequeño script que imprime mensajes con un intervalo de 2 segundos:

import time
print("First message")
time.sleep(2)
print("Second message")
time.sleep(2)
print("Third message")

Al ejecutar este script, el usuario verá una pausa de 2 segundos entre cada mensaje. Así es como funciona un retraso en Python con time.sleep(2).

Parámetros de time.sleep()

La función acepta un solo parámetro, que puede ser un entero o un decimal. Esto ofrece flexibilidad para implementar pausas en distintos contextos.

Usando segundos

La mayoría de los ejemplos usan valores enteros, representando segundos:

time.sleep(10)

Aquí, el script se detiene durante 10 segundos, lo que es útil cuando necesitas una pausa larga o limitar la frecuencia de solicitudes.

Usando fracciones de segundo (milisegundos)

A veces, se necesita una pausa más corta. En ese caso, se puede pasar un número decimal:

time.sleep(0.5)

Esto detiene el programa por medio segundo. Sin embargo, debido a las limitaciones del sistema operativo y del temporizador de Python, el retraso real puede ser ligeramente mayor. En sistemas que requieren alta precisión, se recomiendan herramientas más específicas.

Métodos alternativos para hacer pausas en Python

Aunque time.sleep() es el método más popular y sencillo, existen alternativas más adecuadas para manejar eventos externos o múltiples hilos simultáneamente.

1. Usar input() para esperar

La manera más simple de pausar un programa es con input(). Esta función detiene la ejecución hasta que el usuario presione Enter o introduzca datos.

print("Press Enter to continue...")
input()
print("Resuming program execution")

Aunque parece una pausa, no tiene límite de tiempo, ya que espera una acción del usuario. Es útil en scripts interactivos o durante la depuración.

2. Usar threading.Event()

En programas multihilo, a veces conviene usar objetos de sincronización como threading.Event(), que bloquean un hilo hasta recibir una señal.

import threading
event = threading.Event()

def worker():
    print("Starting work in thread")
    event.wait()
    print("Event received, resuming work")

thread = threading.Thread(target=worker)
thread.start()

import time
time.sleep(3)
event.set()

En este ejemplo, el hilo se bloquea hasta que se llama a event.set(). Esto permite un control más flexible, ya que el hilo puede “despertar” en cualquier momento, sin esperar toda la pausa.

3. Usar asyncio.sleep() en programas asíncronos

En programación asíncrona (módulo asyncio), se usa asyncio.sleep(). A diferencia de time.sleep(), no bloquea todo el hilo, sino solo la corrutina actual, permitiendo que el bucle de eventos continúe ejecutando otras tareas.

import asyncio

async def main():
    print("Start async work")
    await asyncio.sleep(2)
    print("2 seconds passed, resuming")

asyncio.run(main())

Esto es especialmente útil cuando se ejecutan varias funciones asíncronas en paralelo, ya que mantiene el programa fluido. Si usas time.sleep() dentro de código asíncrono, bloquearás todo el bucle de eventos.

Problemas comunes con time.sleep()

Aunque time.sleep() es fácil de usar, un mal uso puede generar bloqueos inesperados o afectar el rendimiento. Es esencial entender cómo influye en el flujo del programa.

Bloqueo del hilo principal

La principal característica de time.sleep() es que bloquea el hilo en el que se llama. Si se utiliza en el hilo principal de una aplicación con interfaz gráfica (Tkinter, PyQt, etc.), la interfaz puede congelarse.

💡 Consejo:
Usa time.sleep() solo en hilos secundarios o cambia a asyncio.sleep() para evitar bloqueos. En aplicaciones GUI, es mejor emplear temporizadores como QTimer o after().

Uso en código multihilo o asíncrono

En programas multihilo, time.sleep() puede ejecutarse en cada hilo por separado, pero no libera automáticamente el Global Interpreter Lock (GIL). Aunque otros hilos pueden seguir ejecutándose, esto depende del sistema operativo.

En código asíncrono, nunca llames a time.sleep() dentro de un bucle de eventos (asyncio.run()), ya que bloqueará toda la ejecución. Utiliza siempre asyncio.sleep(), que cede el control al planificador para que otras corrutinas sigan activas.

Ejemplo práctico: sondeo periódico de una API

Supón que escribes un script que consulta una API cada cierto tiempo, pero las reglas del servicio indican que no se puede hacer más de una solicitud cada 30 segundos.

Solución con time.sleep():

import time
def poll_api():
    print("Making API request...")
def main():
    while True:
        poll_api()
        time.sleep(30)
if __name__ == "__main__":
    main()

Después de cada solicitud, el script se pausa 30 segundos para cumplir con las restricciones.

Alternativa asíncrona:

import asyncio
async def poll_api():
    print("Making API request...")
async def main():
    while True:
        await poll_api()
        await asyncio.sleep(30)
if __name__ == "__main__":
    asyncio.run(main())

Esta versión no bloquea todo el programa, permitiendo ejecutar otras tareas en paralelo dentro del mismo entorno asíncrono.

Conclusión

Organizar pausas y retrasos es una parte importante del desarrollo en Python.
time.sleep() es la herramienta más sencilla y directa para este propósito, pero elegir entre time.sleep(), asyncio.sleep() u otros métodos depende de la arquitectura de tu proyecto.

Recomendaciones clave:

  • Usa time.sleep() para pausas cortas en pruebas, entre solicitudes o demostraciones.

  • Evita bloquear el hilo principal de las aplicaciones GUI.

  • En código asíncrono, sustituye time.sleep() por asyncio.sleep().

  • En programas multihilo, recuerda que solo el hilo actual se detiene.

  • Para esperar eventos o acciones del usuario, considera threading.Event() o input().
Programación en Python
14.10.2025
Reading time: 8 min

Similares

Programación en Python

Comprender las solicitudes HTTP: estructura, métodos y ejemplos

HTTP es la clave de la comunicación en Internet. Los métodos del protocolo HTTP permiten que los clientes envíen solicitudes a los servidores y que los servidores envíen respuestas. Cada sitio web en la World Wide Web utiliza solicitudes HTTP, por lo que es fundamental comprenderlas. Este artículo explora el concepto de solicitudes HTTP, su estructura, los métodos más comunes y ejemplos prácticos, lo que ayuda a entender cómo funciona la web. ¿Qué es una solicitud HTTP? Una solicitud HTTP es un mensaje en el que un cliente —como un navegador web— solicita un recurso específico al host ubicado en un servidor. Los clientes utilizan URLs en las solicitudes HTTP, que indican qué recursos desean obtener del servidor. Componentes de una solicitud HTTP Cada solicitud HTTP se compone de tres elementos principales: Request line (línea de solicitud) Headers (cabeceras) Message body (cuerpo del mensaje) Request Line La request line es la primera línea de una solicitud HTTP. Inicia una acción en el servidor. También indica qué método HTTP y qué versión del protocolo utiliza el cliente. Además del método, la request line incluye una URI o URL. Ejemplo: GET /index.html HTTP/1.1 3.2 Headers Las cabeceras siguen justo después de la línea de solicitud. Proporcionan información adicional del cliente al servidor. Incluyen datos como el host, el user agent, preferencia de idioma, codificación, entre otros. El servidor usa esta información para identificar el navegador y el sistema operativo del cliente. Las cabeceras HTTP son sensibles a mayúsculas y minúsculas, y tienen el formato Nombre: Valor. Ejemplo de cabeceras HTTP: Host: example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Accept: application/json, text/plain, */* Accept-Language: en-US,en;q=0.9 Accept-Encoding: gzip, deflate, br Connection: keep-alive Message Body El cuerpo del mensaje se utiliza para enviar datos al servidor. Es opcional: no todas las solicitudes HTTP incluyen un body. Depende del tipo de solicitud. Las solicitudes que sí incluyen un body suelen usar POST. El servidor utiliza ese contenido para procesar los datos enviados. Métodos HTTP más comunes Una solicitud HTTP sirve para conectar el cliente con el servidor.  Los motivos pueden ser: obtener un recurso enviar datos actualizar información eliminar recursos Estos son los métodos más utilizados: GET – Obtener recursos El método GET se usa para solicitar recursos al servidor. Cada vez que un usuario abre un sitio web, el navegador envía una solicitud GET para obtener el contenido necesario. Características: cacheable safe idempotent GET solo obtiene datos —no modifica nada en el servidor. POST – Enviar datos Cuando el cliente necesita enviar información al servidor (formularios, uploads), se usa POST. El body contiene los datos enviados. Varias solicitudes POST idénticas pueden crear múltiples recursos en el servidor. PUT – Actualizar recursos PUT es similar a POST, pero su propósito es diferente: POST = crear nuevos datos PUT = reemplazar datos existentes El cliente debe especificar la URL del recurso que desea actualizar. PUT es idempotente: ejecutar la misma solicitud varias veces produce el mismo resultado. DELETE – Eliminar recursos DELETE permite que el cliente solicite la eliminación de un recurso específico. Si el servidor lo elimina correctamente, devuelve una confirmación. DELETE también es idempotente. ¿Qué es una respuesta HTTP? Cuando el servidor envía una respuesta a una solicitud HTTP, esto se denomina respuesta HTTP. Al igual que una solicitud, tiene tres componentes: Status line (línea de estado) Headers (cabeceras) Body (cuerpo) Status Line Contiene: versión de HTTP código de estado mensaje del estado Headers Incluyen información como: fecha y hora tipo de contenido detalles del servidor instrucciones de caché Body El contenido real enviado por el servidor, por ejemplo: HTML JSON XML imágenes archivos Códigos de estado y su significado Los códigos de estado HTTP indican el resultado de la solicitud. Cada código tiene tres cifras, y la primera indica su categoría: Grupo Descripción 1xx Informativo — la solicitud continúa procesándose 2xx Éxito — la solicitud se procesó correctamente 3xx Redirección — hace falta otra acción 4xx Error del cliente — la solicitud es incorrecta 5xx Error del servidor — fallo al procesar la solicitud Cabeceras HTTP y su importancia Las cabeceras proporcionan información esencial para la comunicación entre cliente y servidor. Son fundamentales para el funcionamiento de la web. Identificación del host Indican qué dominio está gestionando el servidor. Caching Cabeceras como Cache-Control o Expires definen cuánto tiempo puede almacenarse una respuesta. Gestión de cookies Set-Cookie y Cookie ayudan a mantener sesiones y rastrear estados del usuario. Seguridad Ejemplos: Authorization para autenticación Content-Security-Policy para mitigar ataques XSS Control de respuesta Ayudan a indicar si una solicitud tuvo éxito o falló. Ejemplos prácticos de solicitudes HTTP Todos los ejemplos están en Python usando la librería requests. GET import requests response = requests.get("https://api.example.com/data",                         params={"param1": "value1", "param2": "value2"}) print(response.status_code) print(response.json()) POST import requests url = "https://api.example.com/users" data = {     "username": "newuser",     "email": "newuser@example.com",     "password": "securepassword" } response = requests.post(url, json=data) if response.status_code == 201:     print("User created successfully:", response.json()) else:     print("Error:", response.status_code, response.text) PUT import requests url = "https://api.example.com/users/123" data = {     "username": "updateduser",     "email": "updateduser@example.com" } response = requests.put(url, json=data) if response.status_code == 200:     print("User updated successfully:", response.json()) else:     print("Error:", response.status_code, response.text) DELETE import requests url = "https://api.example.com/users/123" response = requests.delete(url) if response.status_code == 204:     print("User deleted successfully.") else:     print("Error:", response.status_code, response.text) Conclusión Las solicitudes HTTP desempeñan un papel esencial en la interacción web. Por ello, es importante comprender los distintos métodos y cómo funcionan. Elegir el método adecuado garantiza una comunicación eficiente entre cliente y servidor, mejorando el rendimiento de las aplicaciones web.
10 December 2025 · 6 min to read
Programación en Python

Cómo obtener la longitud de una lista en Python

Las listas en Python se utilizan prácticamente en todas partes. En este tutorial veremos cuatro formas de encontrar la longitud de una lista en Python: usando funciones integradas, recursión y un bucle. Conocer la longitud de una lista suele ser necesario para iterar sobre ella y realizar varias operaciones. Función len() len() es una función integrada de Python para obtener la longitud de una lista. Acepta un único argumento — la lista — y devuelve un número entero igual a su longitud. La misma función también funciona con otros objetos iterables, como cadenas de texto. Country_list = ["The United States of America", "Cyprus", "Netherlands", "Germany"] count = len(Country_list) print("There are", count, "countries") Salida: There are 4 countries Obtener la longitud de una lista con un bucle Puedes determinar la longitud de una lista en Python usando un bucle for. La idea es recorrer toda la lista mientras incrementas un contador en 1 en cada iteración. Vamos a encapsular esto en una función aparte: def list_length(list): counter = 0 for i in list: counter = counter + 1 return counter Country_list = ["The United States of America", "Cyprus", "Netherlands", "Germany", "Japan"] count = list_length(Country_list) print("There are", count, "countries") Salida: There are 5 countries Obtener la longitud de una lista con recursión La misma tarea puede resolverse mediante recursión: def list_length_recursive(list): if not list: return 0 return 1 + list_length_recursive(list[1:]) Country_list = ["The United States of America", "Cyprus", "Netherlands","Germany", "Japan", "Poland"] count = list_length_recursive(Country_list) print("There are", count, "countries") Salida: There are 6 countries Cómo funciona. La función list_length_recursive() recibe una lista como entrada. Si la lista está vacía, devuelve 0 — la longitud de una lista vacía. De lo contrario, se llama a sí misma recursivamente con el argumento list[1:], un segmento de la lista original que empieza en el índice 1 (es decir, la lista sin el elemento en el índice 0). El resultado de esa llamada se suma a 1. Con cada paso recursivo el valor retornado aumenta en uno mientras la lista se reduce en un elemento. Función length_hint() La función length_hint() pertenece al módulo operator. Ese módulo contiene funciones análogas a los operadores internos de Python: suma, resta, comparación y otros. length_hint() devuelve la longitud de objetos iterables como cadenas, tuplas, diccionarios y listas. Funciona de manera similar a len(): from operator import length_hint Country_list = ["The United States of America", "Cyprus", "Netherlands","Germany", "Japan", "Poland", "Sweden"] count = length_hint(Country_list) print("There are", count, "countries") Salida: There are 7 countries Ten en cuenta que length_hint() debe importarse antes de usarla. Conclusión En esta guía hemos visto cuatro formas de determinar la longitud de una lista en Python. En igualdad de condiciones, el método más eficiente es len(). Los otros enfoques se justifican principalmente cuando estás implementando clases personalizadas similares a una lista.
04 December 2025 · 3 min to read
Programación en Python

Opciones de línea de comandos y análisis de argumentos con argparse en Python

Las interfaces de línea de comandos (CLIs) son uno de los medios más rápidos y eficaces para interactuar con software. Permiten ejecutar comandos directamente, lo que conduce a una ejecución más rápida y a funciones más avanzadas. Los desarrolladores suelen crear CLIs en Python para múltiples aplicaciones, utilidades y scripts de automatización, permitiendo procesar dinámicamente la entrada del usuario. Aquí es donde entra en juego el módulo argparse de Python. El módulo argparse simplifica el procesamiento de argumentos de la línea de comandos y permite a los desarrolladores crear utilidades interactivas y fáciles de usar. Al ser parte de la biblioteca estándar, permite definir, procesar y validar entradas sin necesidad de lógica compleja. En este artículo veremos los conceptos más importantes, ejemplos prácticos y funciones avanzadas del módulo argparse, para que puedas comenzar a construir herramientas de línea de comandos robustas de inmediato. Cómo usar argparse en Python para interfaces de línea de comandos Paso 1: Importar el módulo Importa el módulo en tu script: import argparse Esto habilita el análisis de argumentos .py desde la línea de comandos. Paso 2: Crear un objeto ArgumentParser La clase ArgumentParser es la clase más básica de la API del módulo argparse. Para utilizarla, crea una instancia: parser = argparse.ArgumentParser(description="A Hostman tutorial on Python argparse.") Aquí: description explica lo que hace el programa y se muestra cuando el usuario ejecuta --help. Paso 3: Añadir argumentos y opciones Define los parámetros que acepta tu programa con add_argument(): parser.add_argument('filename', type=str, help="Name of the file to process") parser.add_argument('--verbose', action='store_true', help="Enable verbose mode") Explicación: filename es obligatorio. --verbose es opcional y activa el modo detallado. Paso 4: Analizar la entrada del usuario Procesa los argumentos proporcionados: args = parser.parse_args() Esto almacena los valores como atributos del objeto args. Paso 5: Acceder a los datos procesados Ejemplo: print(f"File to process: {args.filename}") if args.verbose:     print("Verbose mode enabled") else:     print("Verbose mode disabled") Ejemplos de uso del CLI Procesar archivo sin modo verbose python3 file.py example.txt Procesar archivo con modo verbose python3 file.py example.txt --verbose Mostrar ayuda python3 file.py --help Ejemplos comunes de uso de argparse Ejemplo 1: Añadir valores predeterminados Algunos argumentos opcionales necesitan valores predeterminados. En este ejemplo, --timeout tiene un valor por defecto de 30 segundos: import argparse parser = argparse.ArgumentParser(description="Demonstrating default argument values.") parser.add_argument('--timeout', type=int, default=30, help="Timeout in seconds (default: 30)") args = parser.parse_args() print(f"Timeout value: {args.timeout} seconds") Explicación Importación del módulo Creación del ArgumentParser --timeout con type=int y valor por defecto Procesamiento con parse_args() Caso 1: valor predeterminado python file.py Caso 2: valor personalizado python file.py --timeout 60 Ejemplo 2: Uso de choices El parámetro choices limita un argumento a un conjunto de valores válidos: parser.add_argument('--mode', choices=['basic', 'advanced'], help="Choose the mode of operation") Caso 1: válido python3 file.py --mode basic Caso 2: sin valor python3 file.py Caso 3: valor inválido python3 file.py --mode intermediate Ejemplo 3: Manejar múltiples valores El parámetro nargs='+' permite aceptar varios valores: parser.add_argument('--numbers', nargs='+', type=int, help="List of numbers to process") Caso 1: múltiples números python3 file.py --numbers 10 20 30 Caso 2: un número python3 file.py --numbers 5 Caso 3: sin input python3 file.py Caso 4: valor no válido python3 file.py --numbers 10 abc 20 Ejemplo 4: Argumentos opcionales obligatorios Aunque los argumentos con -- son opcionales por defecto, puedes hacerlos obligatorios usando required=True: parser.add_argument('--config', required=True, help="Path to the configuration file") Caso 1: válido python3 file.py --config settings.json Caso 2: sin el argumento obligatorio python3 file.py Funciones avanzadas Flags booleanas parser.add_argument('--debug', action='store_true', help="Enable debugging mode") Agrupar argumentos relacionados group = parser.add_argument_group('File Operations') group.add_argument('--input', type=str, help="Input file") group.add_argument('--output', type=str, help="Output file") Argumentos mutuamente excluyentes group = parser.add_mutually_exclusive_group() group.add_argument('--json', action='store_true', help="Output in JSON format") group.add_argument('--xml', action='store_true', help="Output in XML format") Conclusión El módulo argparse facilita la creación de CLIs fiables para gestionar argumentos de línea de comandos en Python. Desde opciones básicas hasta características avanzadas como choices y nargs, los desarrolladores pueden construir herramientas robustas y fáciles de usar. Dar nombres claros a los argumentos y escribir buenas descripciones ayuda a mantener tus scripts legibles y fáciles de mantener.
25 November 2025 · 5 min to read

¿Tienes preguntas,
comentarios o inquietudes?

Nuestros profesionales están disponibles para asistirte en cualquier momento,
ya sea que necesites ayuda o no sepas por dónde empezar.
Hostman's Support