Es el lenguaje con mayor puntuación de todos los tiempos en el índice TIOBE, con un 26,14%.
En julio 2025 llegó incluso al 26,98%.
El índice TIOBE es un indicador de cuáles lenguajes de programación son los más populares dentro de un mes determinado.
Su propietario, el CEO de TIOBE Software, Paul Jansen, señala que el índice no es un premio para el “mejor” lenguaje ni una lista en la que se haya escrito la mayor cantidad de código en un lenguaje de programación; en cambio, utiliza motores de búsqueda populares para determinar qué lenguajes son los más utilizados entre los programadores profesionales, los cursos de programación y los proveedores externos.
# Inicialización de variables
suma = 0
numero = 1
# Bucle que suma los números del 1 al 10
while numero <= 10:
suma += numero
numero += 1
# Mostrar el resultado
print("La suma de los números del 1 al 10 es:", suma)
# Usando la función sum y range (estilo funcional)
suma = sum(range(1, 11))
# Mostrar el resultado
print("La suma de los números del 1 al 10 es:", suma)
def sumador(inicio, fin):
"""Devuelve la suma de los números desde 'inicio' hasta 'fin' (inclusive)."""
suma = 0
for numero in range(inicio, fin + 1):
suma += numero
return suma
# Llamada a la función sumador
resultado = sumador(1, 10)
# Mostrar el resultado
print("La suma de los números del 1 al 10 es:", resultado)
class Sumador:
def __init__(self, inicio, fin):
self.inicio = inicio
self.fin = fin
def calcular_suma(self):
suma = 0
for numero in range(self.inicio, self.fin + 1):
suma += numero
return suma
# Crear un objeto de la clase Sumador
sumador = Sumador(1, 10)
# Llamar al método para calcular la suma
resultado = sumador.calcular_suma()
# Mostrar el resultado
print("La suma de los números del 1 al 10 es:", resultado)
Es un estilo de programación donde una función puede pausar su ejecución para esperar algo (como una respuesta de red) y, mientras tanto, el programa sigue ejecutando otras tareas.
En Python se implementa usando:
async
def para definir funciones asincrónicas (corutinas).await
para esperar tareas asincrónicas sin bloquear el flujo.asyncio
como módulo principal de soporte.import asyncio
async def tarea_lenta():
print("Empieza tarea")
await asyncio.sleep(2) # Simula tarea lenta (esperar 2 seg sin bloquear)
print("Tarea completada")
async def main():
await tarea_lenta()
print("Fin del programa")
asyncio.run(main())
import asyncio
async def tarea(id):
print(f"Inicio tarea {id}")
await asyncio.sleep(2)
print(f"Fin tarea {id}")
async def main():
await asyncio.gather(
tarea(1),
tarea(2),
tarea(3),
)
asyncio.run(main())
Las tres tareas se ejecutan al mismo tiempo, y el programa solo tarda 2 segundos en total, no 6.
from multiprocessing import Process
import time
def tarea():
time.sleep(1)
print("Tarea terminada")
p = Process(target=tarea)
p.start()
p.join()
Tanto multiprocessing
como asyncio
permiten ejecutar múltiples tareas «al mismo tiempo», pero lo hacen de formas muy diferentes y están pensados para casos distintos.
Característica | multiprocessing |
asyncio (con async/await ) |
---|---|---|
🧠 Paradigma | Paralelismo real usando procesos separados | Concurrencia cooperativa usando corutinas |
🧩 Uso principal | Tareas pesadas de CPU | Tareas de entrada/salida (I/O) como red, archivos |
🔄 Multitarea real | Sí. Corre en múltiples núcleos | No. Corre en un solo hilo (pero no se bloquea) |
🔒 GIL (CPython) | Evita el GIL creando nuevos procesos | Afectado por el GIL, aunque no suele importar en I/O |
🧱 Recursos | Más pesado: nuevos procesos, más memoria | Ligero: todo en un solo hilo y proceso |
🔁 Bloqueo de tareas | No bloquea otras tareas | Tampoco bloquea, gracias a await |
🔧 Comunicación | Más compleja: se usan colas, pipes, etc. | Simple: las corutinas comparten el mismo hilo |
🧪 Debugging | Más complejo | Más fácil, se parece al código secuencial |
Cuando usar cada uno:
Caso de uso | ¿Qué usar? |
---|---|
Procesar imágenes o video | multiprocessing |
Cálculos matemáticos pesados | multiprocessing |
Web scraping simultáneo (muchas URLs) | asyncio |
Consultas a APIs externas | asyncio |
Consultar una base de datos remota | asyncio |
Leer/escribir muchos archivos a la vez | asyncio |
Algoritmos de Machine Learning | multiprocessing |
Framework | Descripción breve |
---|---|
Django | Framework web completo, rápido, seguro, «baterías incluidas». Ideal para apps grandes. |
Flask | Microframework ligero, ideal para APIs y apps pequeñas/medianas. |
FastAPI | Framework moderno, rápido y eficiente para APIs REST con tipado y validación automática. |
Tornado | Framework asincrónico y servidor web de alto rendimiento. |
Pyramid | Flexible, escalable, más complejo que Flask pero menos que Django. |
Sanic | Similar a FastAPI, enfocado en alto rendimiento con async/await. |