
Tengo una colección de 150 comandos CLI para ejecutar en un archivo, en mi máquina de 12 núcleos. Ejecutar las 150 tareas en segundo plano atasca el sistema y, por experiencia, he descubierto que tener entre 12 y 18 tareas en ejecución es óptimo.
En el pasado, simplemente dividía los 150 comandos en archivos por lotes de 12 o 13 partes, usando el comando dividir, y luego ejecutaba cada uno. Sin embargo, algunos de los archivos por lotes terminaron antes que otros, y finalmente termino con 3 o 4 archivos por lotes que tardan mucho más en finalizar que otros, mientras que los otros 9 u 8 núcleos están inactivos.
Mi objetivo es mantener los 12 núcleos en funcionamiento hasta que se ejecuten los 150 comandos CLI.
¿Es posible hacer que cada procesador tome una tarea de la lista de 150 comandos de la CLI, marque ese comando como en ejecución y deje que los otros 11 procesadores tomen su propio elemento, hasta que los 150 estén terminados, sin que los procesadores se tropiecen entre sí y se agarren? ¿El mismo comando CLI? Las escrituras de archivos deben ser únicas.
¿Hay alguna manera fácil de hacer esto?
Respuesta1
Usando GNU Parallel se ve así:
cat 150commands.txt | parallel
Ejecutará un trabajo por núcleo.
GNU Parallel es un paralelizador general y facilita la ejecución de trabajos en paralelo en la misma máquina o en varias máquinas a las que tiene acceso ssh. A menudo puede reemplazar un for
bucle.
Si tiene 32 trabajos diferentes que desea ejecutar en 4 CPU, una forma sencilla de paralelizar es ejecutar 8 trabajos en cada CPU:
En cambio, GNU Parallel genera un nuevo proceso cuando uno finaliza, manteniendo las CPU activas y, por lo tanto, ahorrando tiempo:
Instalación
Si GNU Parallel no está empaquetado para su distribución, puede realizar una instalación personal, que no requiere acceso de root. Se puede hacer en 10 segundos haciendo esto:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
Para otras opciones de instalación consultehttp://git.savannah.gnu.org/cgit/parallel.git/tree/README
Aprende más
Ver más ejemplos:http://www.gnu.org/software/parallel/man.html
Mira los vídeos de introducción:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Sigue el tutorial:http://www.gnu.org/software/parallel/parallel_tutorial.html
Regístrese en la lista de correo electrónico para obtener ayuda:https://lists.gnu.org/mailman/listinfo/parallel