Pause todas las tareas intensivas de CPU excepto x

0

Tengo alrededor de 50 carpetas de datos para procesar, y tengo un script ruby ​​que procesa los archivos de una carpeta (la carpeta que procesa se basa en un archivo de configuración .yml). Y una computadora con cuatro CPU.

Me gustaría poder iniciar los 50 procesos, pero solo tengo 4 de ellos ejecutándose activamente en cualquier momento, y tener los otros 46 pausados. Una vez que uno de los procesos finaliza, me gustaría que uno de los procesos pausados ​​no se pause, hasta que se completen los 50. De esa manera, puedo hacer

./super_script.rb > folder_1_log.txt
*edit config.yml*
./super_script.rb > folder_2_log.txt
*edit config.yml*
...

Y concéntrate en otra cosa hasta que el procesamiento haya terminado.

¿Es posible hacer esto? ¿Hay algunos términos para lo que quiero que pueda googlear?

(Otra alternativa sería hacer que super_script sea capaz de multiprocesamiento, tal vez soy un gato asustado por no tomar ese enfoque)

(El sistema operativo es Ubuntu Linux, y la mayor parte del tiempo de la CPU no es ocupado por super_script.rb, sino por otros programas ruby ​​que llama a través del sistema ())

Andrew Grimm
fuente
¿Esta pregunta no pertenece a StackOverflow.com?
Peter Mortensen el
@ Peter, hubiera pensado lo contrario. ¿Qué etiquetas le darías en SO?
Andrew Grimm el
Posibles etiquetas (OK, algunas de ellas son exageradas): bash-programación bash-script ruby ​​multiprogramación procesamiento por lotes comunicación cruzada-proceso distribuido-computación-computación en clúster
Peter Mortensen

Respuestas:

2

Aquí hay un script bash que parece que hace algo parecido a lo que desea hacer: inicia una serie de procesos en paralelo, pero se asegura de que no se ejecuten más de n al mismo tiempo.

Por otro lado, si lo que está haciendo está vinculado al disco, en lugar de estar vinculado a la CPU (le pregunto porque dice que tiene "50 carpetas de datos para procesar"), entonces es posible que esté mejor ejecutando todos sus procesos en serie para evitar la contención del disco entre los procesos.

Martin B
fuente
Gracias. He basado mi script gist.github.com/148221 en él
Andrew Grimm el