BATCH – Script para ejecutar procesos en paralelo.

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.

#!/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
Esta entrada fue publicada en Unix - Linux. Guarda el enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.