Quiero procesar muchos archivos y desde que tengo aquí un montón de núcleos, quiero hacerlo en paralelo:
for i in *.myfiles; do do_something $i `derived_params $i` other_params; done
Sé de una solución Makefile pero mis comandos necesitan los argumentos de la lista global de shell. Lo que encontré es:
> function pwait() {
> while [ $(jobs -p | wc -l) -ge $1 ]; do
> sleep 1
> done
> }
>
Para usarlo, todo lo que hay que hacer es poner y después de los trabajos y una llamada en espera, el parámetro proporciona la cantidad de procesos paralelos:
> for i in *; do
> do_something $i &
> pwait 10
> done
Pero esto no funciona muy bien, por ejemplo, lo probé con, por ejemplo, un bucle for que convierte muchos archivos, pero me dio un error y dejó los trabajos sin hacer.
No puedo creer que esto aún no se haya hecho ya que la discusión sobre la lista de correo de zsh es muy antigua por ahora. Entonces, ¿sabes algo mejor?
echo "DONE"
después del ciclo que se ejecutó antes de que los trabajos activos no finalicen. => Esto me hizo pensar que los trabajos no estaban hechos.