Estoy un poco confundido acerca de si el multiproceso funciona en Python o no.
Sé que ha habido muchas preguntas sobre esto y he leído muchas de ellas, pero todavía estoy confundido. Sé por mi propia experiencia y he visto a otros publicar sus propias respuestas y ejemplos aquí en StackOverflow que el multiproceso es posible en Python. Entonces, ¿por qué todo el mundo sigue diciendo que Python está bloqueado por GIL y que solo se puede ejecutar un hilo a la vez? Claramente funciona. ¿O hay alguna distinción que no estoy obteniendo aquí?
Muchos carteles / encuestados también siguen mencionando que el enhebrado es limitado porque no utiliza múltiples núcleos. Pero diría que siguen siendo útiles porque funcionan simultáneamente y, por lo tanto, hacen que la carga de trabajo combinada se realice más rápido. Quiero decir, ¿por qué habría un módulo de hilo de Python de otra manera?
Actualizar:
Gracias por todas las respuestas hasta el momento. La forma en que lo entiendo es que el subproceso múltiple solo se ejecutará en paralelo para algunas tareas de E / S, pero solo se puede ejecutar una a la vez para las tareas de múltiples núcleos vinculados a la CPU.
No estoy del todo seguro de lo que esto significa para mí en términos prácticos, así que solo daré un ejemplo del tipo de tarea que me gustaría realizar en múltiples hilos. Por ejemplo, digamos que quiero recorrer una lista muy larga de cadenas y quiero hacer algunas operaciones básicas de cadena en cada elemento de la lista. Si divido la lista, envío cada sublista para que sea procesada por mi código de ciclo / cadena en un nuevo hilo y devuelvo los resultados en una cola, ¿se ejecutarán estas cargas de trabajo aproximadamente al mismo tiempo? Lo más importante, ¿teóricamente acelerará esto el tiempo que lleva ejecutar el script?
Otro ejemplo podría ser si puedo renderizar y guardar cuatro imágenes diferentes usando PIL en cuatro subprocesos diferentes, y ¿esto será más rápido que procesar las imágenes una por una después de la otra? Supongo que este componente de velocidad es lo que realmente me pregunta en lugar de cuál es la terminología correcta.
También conozco el módulo de multiprocesamiento, pero mi principal interés en este momento es para cargas de tareas pequeñas a medianas (10-30 segundos), por lo que creo que el subproceso múltiple será más apropiado porque los subprocesos pueden ser lentos para iniciar.