* Imagenes de instalación de las versiones estables para Mageia y OpenMandriva.

OpenMandriva: Mageia (Mageia 9) 20/Agosto/2023 - Anuncio, Descargas.

Blogdrake recomienda descargar las imágenes de instalación (iso) vía torrent para evitar corrupción de datos, aprovechar mejor su ancho de banda y mejorar la difusión de las distribuciones.

Howto: tareas en paralelo en Bash

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 ejectutadas antes de lanzar el siguiente grupo.

El código es el siguiente:

# 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

# Esperamos a que termine el último grupo de tareas en ejecución antes de continuar con lo que queramos hacer
wait

El número de procesadores se puede agregar como una variable a u script, dependiendo de la máquina donde se ejecuta o de la cantidad de procesos que el equipo pueda realizar al mismo tiempo. Recordemos que la compresión con gzip no es un proceso complicado o intensivo en recursos.

Para usar todos los procesadores/núcleos disponibles se puede contar la cantidad de procesadores que muestra cpuinfo:

...
num_proc=$(cat /proc/cpuinfo  |grep processor |wc -l)
if [ $count -eq $num_proc ]; then
...

Realmente ayuda a acelerar las cosas cuando tienes que lanzar una tarea mas compleja en un equipo con 24 núcleos, todos usados al 100% y sin que la máquina se sobrecargue. Y más todavía cuando tienes que ejecutar 500 trabajos en 30 servidores y todos usando toda la CPU disponible ;)

Salu2!