Problema: se necesita ejecutar una misma tarea sobre muchos elementos y tengo mas de un procesador disponible.
Supongamos que debemos comprimir 100 archivos CSV muy grandes en un equipo con 24 núcleos. Comprimirlos secuencialmente tomaría un par de horas, así que vamos a hacer que lance 24 tareas de compresión al mismo tiempo.
Para ello vamos a usar un contador, el operador & para lanzar tareas en background y el comando wait para esperar a que terminen las tareas ejecutadas (procesos hijos ) antes de lanzar el siguiente grupo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/bin/bash # Inicializamos el contador count=0 # Para cada archivo csv for files in $(ls *.csv); do # Comprimimos un archivo en background gzip $file & count=$(($count+1)) # Si el contador llega a 24, esperar a que terminen las tareas antes de ejecutar las siguientes if [ $count -eq 24 ]; then count=0 # Esperar wait fi done exit |