Crea un gestor de inventario profesional en Python asíncrono en 150 líneas
Código Espinoza - Automatiza tu Vida
0:00 / 0:00
Crea un gestor de inventario profesional en Python asíncrono en 150 líneas
18 569 просмотров · 4 нед. назад
Código Espinoza - Automatiza tu Vida
80,1 тыс. подписчиков
18 569 просмотров · 4 нед. назад
100.000 movimientos de inventario grabados en cerca de un segundo, con un archivo de 150 líneas de Python. El mismo trabajo, escrito como lo hacemos casi todos la primera vez, hace 24 por segundo. Entre uno y otro no hay más servidores ni frameworks: hay cuatro decisiones. Y la cuarta tapa un error que mi propia prueba de carga no encontró: pasó en verde con el bug adentro.
Apóyame en mi Patreon (Código)):
/ python-inventory-171312837
Únete a este canal para apoyarme:
/ @codigoespinoza
¿Regalame un Café?:
https://ko-fi.com/ivespino
Curso de Python desde cero 2023:
• 👉 Curso de Python Gratis desde Cero 2025 🐍...
✈ Unete a nuestra comunidad de Telegram: https://t.me/+F9c-RdxQYRk4YTdh
💎Únete a nuestra comunidad de Discord: / discord
📥Correo de Contacto: ivespinops@gmail.com
📦 PROYECTO COMPLETO PARA DESCARGAR
Gestor de 150 líneas, cada paso en su propio archivo, la demo de la condición de carrera, la prueba de carga y un README con cada comando probado. Está en Patreon: el enlace va en el comentario fijado. Apoyarlo mantiene este tipo de videos independientes.
VIDEO RELACIONADO DEL CANAL
Si quieres ver qué pasa cuando un detalle así se escapa con un cliente real: «A mi amigo le pagaron $2.000 por código PERFECTO… y casi lo demandan».
CAPÍTULOS
0:00 100.000 movimientos en un segundo
0:34 El script que todos escribimos
1:28 Decisión 1: la regla vive en el SQL
2:57 Decisión 2: cola y lotes con asyncio.Queue
4:43 Decisión 3: proteger la API (límite, timeout y reintentos)
6:31 El archivo final y la prueba de carga
7:46 Decisión 4: el candado (el bug que la prueba no encontró)
8:47 Cómo adaptarlo a tu proyecto
9:40 Cierre
CONCEPTOS Y HERRAMIENTAS MENCIONADAS
asyncio, asyncio.Queue y productor-consumidor
Backpressure y apagado limpio con Queue.shutdown (Python 3.13)
asyncio.timeout, reintentos con backoff y límite de llamadas por segundo
aiosqlite y SQLite en modo WAL
Condiciones de carrera y por qué una prueba en verde no las descarta
Python 3.14: except con varias excepciones sin paréntesis y python -m asyncio pstree
Alternativa para PostgreSQL: asyncpg · exposición a internet: FastAPI con autenticación
PREGUNTAS FRECUENTES
¿Cómo hago un productor-consumidor con asyncio.Queue?
Los productores dejan los movimientos en una asyncio.Queue con tope (maxsize); un único consumidor los saca y los graba por lotes. Si la cola se llena, quien produce espera su turno: eso es backpressure.
¿Cómo grabar 100.000 registros en SQLite sin bloquear el programa?
Con aiosqlite, una sola conexión de escritura, executemany por lotes de hasta 500 y un solo commit por lote. Pasar de un commit por movimiento a uno por lote concentra buena parte de la ganancia.
¿Cómo protejo una API externa que se cae o se cuelga?
Con tres capas: un límite de llamadas por segundo, un timeout (asyncio.timeout) y reintentos con espera creciente, anotando en una lista de fallidos lo que no se pudo tras tres intentos.
¿Por qué una prueba de carga en verde no demuestra que no hay condiciones de carrera?
Porque el fallo exige una coincidencia de milisegundos en un caso muy raro. Casi nunca ocurre en tu máquina, pero sí en producción bajo tráfico real. La concurrencia se razona, no solo se ejecuta.
¿Dónde descargo el código del proyecto?
Está disponible en Patreon; el enlace está en el comentario fijado.
HASHTAGS
#Python #asyncio #Programación #SQLite #Backend