En CPython (build por defecto, con el GIL activado), ¿qué carga de trabajo se acelera de verdad con threading?
Opciones
- Trabajo CPU-bound en Python puro, como redimensionar imágenes en un bucle
- Trabajo I/O-bound, como cientos de peticiones HTTP concurrentes (Opción correcta)
- Ambos tipos de trabajo se aceleran por igual con más threads
- Ninguno: los threads adicionales nunca aceleran el código Python
Respuesta
Trabajo I/O-bound, como cientos de peticiones HTTP concurrentes
Por qué
El GIL (Global Interpreter Lock) es un lock dentro de CPython que permite que solo UN thread ejecute código Python en cada momento.
Para cálculos (trabajo de CPU), los threads adicionales solo se turnan, así que la tarea no termina antes.
Pero cuando un thread espera a la red o al disco, libera el GIL y otro thread puede ejecutarse. Con 100 peticiones HTTP casi todo el tiempo es espera, así que los threads solapan esa espera y el tiempo total baja mucho.
Recuerda
Los threads ayudan cuando esperas (I/O). Para cálculo pesado, usa varios procesos.