![*](https://i94.photobucket.com/albums/l93/drakedalfa/blogdrake/e-2.gif)
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.
![](https://i94.photobucket.com/albums/l93/drakedalfa/blogdrake/e-2.gif)
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!