0% encontró este documento útil (0 votos)
2 vistas17 páginas

BN PythonInt Sesión02

El documento presenta conceptos fundamentales de programación en Python, incluyendo clases, objetos, herencia, polimorfismo, encapsulación y abstracción, así como ejemplos prácticos de gestión de empleados. También se abordan técnicas de threading y asyncio, destacando sus beneficios y escenarios de uso, como la ejecución concurrente de tareas y la mejora de la eficiencia en operaciones de E/S. Se concluye que el threading es útil para tareas I/O y que asyncio es preferible para aplicaciones que requieren alta concurrencia sin la complejidad de múltiples hilos.

Cargado por

Luisa Rosatel
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
2 vistas17 páginas

BN PythonInt Sesión02

El documento presenta conceptos fundamentales de programación en Python, incluyendo clases, objetos, herencia, polimorfismo, encapsulación y abstracción, así como ejemplos prácticos de gestión de empleados. También se abordan técnicas de threading y asyncio, destacando sus beneficios y escenarios de uso, como la ejecución concurrente de tareas y la mejora de la eficiencia en operaciones de E/S. Se concluye que el threading es útil para tareas I/O y que asyncio es preferible para aplicaciones que requieren alta concurrencia sin la complejidad de múltiples hilos.

Cargado por

Luisa Rosatel
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

CURSO

PYTHON INTERMEDIO

Luis Sigueñas
TelecSA
Creación de clases y objetos
• Clases y Objetos: Una clase es un modelo o plantilla para crear objetos, mientras que un objeto es una
instancia concreta de una clase.

• Herencia: Permite a las clases (clases hijas) heredar atributos y métodos de otras clases (clases
padres), promoviendo la reutilización de código.

• Polimorfismo: Permite que objetos de diferentes clases respondan de manera diferente a un mismo
método, creando flexibilidad en el código.

• Encapsulación: Oculta los datos y métodos internos de una clase, controlando el acceso a ellos para
proteger la integridad de los objetos.

• Abstracción: Oculta la complejidad interna de una clase, exponiendo solo la funcionalidad necesaria
para el usuario.
Ejemplo: Gestión de empleados
import random
#proporciona funciones para generar números pseudoaleatorios

Clases y Objetos:
Clase: Plantilla/blueprint que define atributos y métodos
Objeto: Instancia concreta de una clase

Atributos y Métodos:
Atributos: Variables que pertenecen a la clase/objeto
Métodos: Funciones definidas dentro de la clase

Constructor (__init__):
Método especial que se ejecuta al crear un objeto

Encapsulamiento:
Ocultar detalles internos (convención _ para atributos "privados")
class Empleado: Crear una clase Producto con:
def __init__(self, nombre, puesto, salario):
[Link] = nombre Atributos: nombre, precio,
[Link] = puesto cantidad_en_stock
self._salario = salario # Atributo "protegido"
Métodos: mostrar_info(),
def mostrar_informacion(self): vender(cantidad),
return f"{[Link]} - {[Link]} - Salario: ${self._salario}" reponer(cantidad)

def aumentar_salario(self, porcentaje):


self._salario *= (1 + porcentaje/100)
return f"Nuevo salario: ${self._salario:.2f}"

# Creación de objetos
empleado1 = Empleado("Ana López", "Desarrolladora", 50000)
empleado2 = Empleado("Carlos Ruiz", "Analista", 45000)

# Uso de métodos
print(empleado1.mostrar_informacion())
print(empleado2.aumentar_salario(10))
Threading Básico
El uso de threading básico es fundamental en escenarios donde necesitamos mejorar la eficiencia de
nuestros scripts de automatización.

Ejecución Concurrente de Tareas


• Permite ejecutar múltiples comandos de Shell simultáneamente
• Reduce significativamente el tiempo total de ejecución
• Ideal para operaciones I/O bound (como ejecución de comandos externos)

Mejor Aprovechamiento de Recursos


• Optimiza el uso de CPU durante tiempos de espera
• Permite que el programa siga respondiendo mientras se ejecutan comandos largos

Implementación Sencilla en PyCharm


• PyCharm ofrece excelente soporte para depuración de hilos
• Visualización clara de la ejecución concurrente
Threading Básico
Beneficio Explicación Ejemplo Bancario

Mayor velocidad en tareas Ejecutar múltiples operaciones al Procesar transacciones de


concurrentes mismo tiempo. diferentes clientes en paralelo.

No bloquear el programa principal


Consultar saldos en múltiples
Optimización de recursos mientras se esperan respuestas
cuentas sin bloquear la interfaz.
externas.

Manejar muchas solicitudes sin crear Procesar miles de solicitudes de


Escalabilidad procesos separados (más eficiente tarjetas de crédito
que multiprocessing para I/O). simultáneamente.

Más fácil de implementar


Automatizar reportes diarios con
Simplicidad que asyncio o multiprocessing para
comandos Shell.
casos básicos.
Threading Básico
Se recomienda usar threading en estos escenarios:

• Procesamiento de transacciones en paralelo (ejecutar múltiples transferencias al mismo tiempo).


• Generación de reportes automatizados (backups, logs, balances).
• Consultas simultáneas a bases de datos (saldos, movimientos, clientes).
• Monitoreo en tiempo real (espacio en disco, uso de CPU, logs de errores).
• Ejecución de comandos Shell concurrentes (respaldo de datos, análisis de registros).

¿Cuándo NO usarlo?

• Para tareas intensivas en CPU (mejor usar multiprocessing).


• Si las operaciones requieren orden estricto (los hilos no garantizan secuencialidad).
Threading Básico
Se recomienda usar threading en estos escenarios:

• Procesamiento de transacciones en paralelo (ejecutar múltiples transferencias al mismo tiempo).


• Generación de reportes automatizados (backups, logs, balances).
• Consultas simultáneas a bases de datos (saldos, movimientos, clientes).
• Monitoreo en tiempo real (espacio en disco, uso de CPU, logs de errores).
• Ejecución de comandos Shell concurrentes (respaldo de datos, análisis de registros).

¿Cuándo NO usarlo?

• Para tareas intensivas en CPU (mejor usar multiprocessing).


• Si las operaciones requieren orden estricto (los hilos no garantizan secuencialidad).
Ejemplo
Un banco necesita:

• Respaldar bases de datos de clientes.


• Procesar archivos de transacciones diarias.
• Verificar el espacio en disco del servidor.

¿Qué se entiende por concurrencia?


Asyncio
Es un módulo de Python diseñado para escribir código
concurrente utilizando corrutinas (funciones asíncronas) y el
paradigma de programación asíncrona.

Su principal objetivo es manejar operaciones de E/S


(Input/Output) sin bloqueo, como:

• Solicitudes HTTP (APIs)


• Consultas a bases de datos
• Lectura/escritura de archivos
• Conexiones de red (sockets, WebSockets)
• Procesamiento de múltiples tareas en paralelo sin usar
múltiples hilos (threading).
Asyncio
1. Eficiencia en operaciones de E/S (I/O Bound)
• Cuando un programa realiza operaciones de entrada/salida (como esperar una respuesta de una
API o leer un archivo), el código tradicional se bloquea hasta que la operación termine.
• Con asyncio, Python puede pausar la tarea actual y ejecutar otras tareas mientras espera,
mejorando el rendimiento.

2. Menos sobrecarga que los hilos (threading)


• Los hilos (threading) consumen más memoria y pueden generar problemas de sincronización (race
conditions).
• asyncio usa un solo hilo y alterna entre tareas, evitando problemas de concurrencia.

3. Ideal para servidores y aplicaciones en red


• Servidores web (FastAPI, Quart, aiohttp)
• Scrapers y bots que hacen múltiples peticiones HTTP.
• Procesamiento de datos en tiempo real (WebSockets, MQTT).
Asyncio: Conceptos clave
1. Corrutinas (async def)
Son funciones que pueden pausar su ejecución con await y luego reanudarse.

async def mi_funcion():


print("Inicio")
await [Link](1) # Simula una operación de E/S
print("Fin después de 1 segundo")

2. await (esperar una operación asíncrona)


Indica que el programa puede hacer otras cosas mientras espera a que termine una operación (como una
petición HTTP o una consulta a la BD).

await [Link](2) # Espera 2 segundos sin bloquear el programa


Asyncio: Conceptos clave
3. Event Loop (Bucle de eventos)
Es el núcleo de asyncio. Maneja la ejecución de las corrutinas y decide cuándo cambiar entre tareas.

async def main():


await mi_funcion()
[Link](main()) # Inicia el event loop

4. Tareas (Tasks)
Permiten ejecutar corrutinas en paralelo (concurrentemente).

async def tarea1(): async def main():


await [Link](1) # Ejecutar ambas tareas concurrentemente
print("Tarea 1 terminada") await [Link](tarea1(), tarea2())

async def tarea2(): [Link](main())


await [Link](2)
print("Tarea 2 terminada")
Asyncio
Beneficio Descripción

Maneja miles de conexiones simultáneas sin bloquear el


Mayor rendimiento en E/S
programa.

Menos uso de memoria No requiere múltiples hilos como threading.

Escalabilidad Ideal para microservicios y APIs rápidas (FastAPI usa asyncio).

Concurrencia sencilla Más fácil de depurar que threading (evita race conditions).
Conclusiones
El threading básico en PyCharm es ideal para:
• Automatizar tareas bancarias que involucren esperas (I/O).
• Mejorar la eficiencia de scripts que usan comandos Shell.
• Ejecutar operaciones concurrentes sin bloquear el programa principal.

Usa asyncio cuando:

• Tu aplicación hace muchas operaciones de E/S (APIs, bases de datos,


archivos).
• Necesitas concurrencia sin la complejidad de los hilos (threading).
• Quieres alto rendimiento en servidores o aplicaciones en red.

También podría gustarte