¿Cómo puedo obtener el índice del "procesador paralelo" de xargs?


14

Supongamos que tengo dos recursos, nombrados 0y 1, a los que solo se puede acceder de forma exclusiva.

¿Hay alguna forma de recuperar el "índice" del "procesador paralelo" que se xargsinicia para usarlo como un servicio gratuito de exclusión mutua? Por ejemplo, considere el siguiente cálculo paralelo:

$ echo {1..8} | xargs -d " " -P 2 -I {} echo "consuming task {}"
consuming task 1
consuming task 2
consuming task 3
consuming task 4
consuming task 5
consuming task 6
consuming task 7
consuming task 8

Mi pregunta es si existe una palabra mágica, por ejemplo index, donde se vería la salida

$ echo {1..8} | xargs -d " " -P 2 -I {} echo "consuming task {} with resource index"
consuming task 1 with resource 0
consuming task 2 with resource 1
consuming task 3 with resource 1
consuming task 4 with resource 1
consuming task 5 with resource 0
consuming task 6 with resource 1
consuming task 7 with resource 0
consuming task 8 with resource 0

donde la única garantía es que solo hay como máximo un proceso que utiliza recursos 0y el mismo para 1. Básicamente, me gustaría comunicar este índice al proceso secundario que respetaría la regla de usar solo el recurso que se le indicó.

Por supuesto, sería preferible extender esto a más de dos recursos. Inspeccionar los documentos, xargsprobablemente no pueda hacer esto. ¿Existe una solución equivalente mínima? Usar / limpiar archivos como cerraduras falsas no es preferible.

Respuestas:


19

Si está utilizando GNU xargs , hay --process-slot-var:

--process-slot-var= nombre-variable-
entorno Establezca la variable de entorno nombre-variable-entorno en un valor único en cada proceso secundario en ejecución. Cada valor es un entero decimal. Los valores se reutilizan una vez que los procesos secundarios salen. Esto puede usarse en un esquema de distribución de carga rudimentario, por ejemplo.

Así por ejemplo:

~ echo {1..9} | xargs -n2 -P2 --process-slot-var=index sh -c 'echo "$index" "$@" "$$"' _
0 1 2 10475
1 3 4 10476
1 5 6 10477
0 7 8 10478
1 9 10479
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.