¿Cómo se ve un programa Python paralelizado con el comando superior?

¿Cómo se ve un programa Python paralelizado con el comando superior?

Trabajo en un clúster compartido. He visto personas ejecutar código c paralelizado en este clúster que, cuando uso toppara ver qué procesos se están ejecutando, se muestra que usan (por ejemplo) el 400% de la CPU, ya que están usando cuatro procesadores para una sola instancia de su código.

Ahora alguien está ejecutando (lo que según he oído) un código Python paralelizado. Sin embargo, en lugar de topmostrar que el código Python usa el 400% de la CPU, se muestra como cuatro procesos diferentes, cada uno usando su propio procesador (al 100%).

Me pregunto: ¿Python (cuando está en paralelo) se muestra con toptantos procesos diferentes en ejecución (a diferencia de C) o este código de Python en realidad no se ejecuta en paralelo?

No sé si Stack Exchange sería un mejor lugar para esta pregunta. Como lo estoy usando, toppensé que este lugar sería mejor. Déjame saber si debo moverlo.

Respuesta1

Lo que ves en C es el uso de subprocesos, por lo que el uso del proceso es el total de todos sus subprocesos. Si hay 4 subprocesos con un uso de CPU del 100% cada uno, el proceso se mostrará como 400%

Lo que ves en Python es casi con certeza paralelismo a través del modelo multiproceso. Ese es un modelo destinado a superar las limitaciones de subprocesamiento de Python. Python solo puede ejecutar un subproceso a la vez (consulte Python Global Interpreter Lock - GIL). Para hacerlo mejor que eso, se puede usar el módulo multiproceso que termina creando procesos en lugar de subprocesos, que a su vez se muestran en ps como procesos múltiples, que luego pueden usar hasta el 100% de la CPU cada uno, ya que son (cada uno) de un solo proceso. roscado.

Apuesto a que si ejecutas ps -afeTverás los subprocesos del programa C pero ningún subproceso adicional para el programa Python.

Respuesta2

La implementación de Python de referencia, CPython, tiene el bloqueo global de intérprete (GIL), que le impide ejecutar código enparalelo, soloal mismo tiempo. El subprocesamiento sólo es útil para E/S. Necesita múltiples procesos para poder ejecutarse en paralelo. Es probable que el código C que está viendo utilice subprocesos para el paralelismo.

información relacionada