threading.Thread() es una de las bibliotecas estándar de Python, que proporciona una herramienta para realizar tareas asíncronas en segundo plano de manera sencilla.
Se puede utilizar sin necesidad de instalar bibliotecas externas, y es útil para implementar procesamiento paralelo simple.

1. ¿Cuándo usarlo?
- Cuando la tarea lleva mucho tiempo, pero no es crítica en caso de fallo.
- Cuando en un servidor web se desea dar una respuesta rápida al usuario y manejar el resto del procesamiento por separado.
- Cuando se quiere hacer un procesamiento asíncrono de manera liviana antes de implementar sistemas pesados como Celery o Redis.
2. Criterios para usarlo
| Situación | Recomendación |
|---|---|
| Cuando se desea dar una respuesta rápida | ✅ Adecuado para usar |
| Cuando el tiempo de trabajo es corto o moderado | ✅ Adecuado para usar |
| Cuando un fallo en la tarea no es crítico | ✅ Adecuado para usar |
| Cuando la estabilidad y la monitorización son importantes | ❌ Se recomienda usar Celery |
| Cuando se debe manejar cuidadosamente las transacciones de base de datos | ⚠️ Precaución al usar ORM |
3. Ejemplo de uso
import threading
import time
def background_task():
print("Inicio de tarea en segundo plano")
time.sleep(3)
print("Tarea en segundo plano completada")
# Ejecutar el hilo
thread = threading.Thread(target=background_task)
thread.start()
print("Fin del hilo principal")
target=nombre_de_la_función: Especifica la función a ejecutar
args=(arg1, arg2, ...)permite pasar argumentos
Se debe llamar a.start()para que el hilo se ejecute realmente
4. Precauciones al usar en Django
- El ORM de Django no es thread-safe, por lo que se debe tener cuidado con el manejo de transacciones de BD.
- Si ocurre una excepción dentro del hilo, no se captura automáticamente → se deben usar obligatoriamente
try/except. - Si se utilizan datos relacionados con la solicitud dentro del hilo, es necesario verificar su validez (por ejemplo: request.user).
- Se recomienda implementar de manera que se pueda detectar mediante registros si hay fallos en las tareas posteriores.
5. Resumen
| Ventajas | Desventajas |
|---|---|
| Facilidad (sin necesidad de instalación) | No se puede reintentar automáticamente/monitorear |
| Mejora en la velocidad de respuesta | Posible conflicto con ORM |
| Posibilidad de procesamiento asíncrono ultra ligero | Dificultad de gestión en caso de fallos de tarea |
6. Comentario de Jesse
threading.Thread()es un método excelente para realizar procesamiento asíncrono rápidamente sin poner una gran carga en el servidor.
Es una etapa intermedia antes de pasar a Celery, que puede ser una herramienta suficientemente poderosa en el mundo real.
No hay comentarios.