Xargs “paralel işlemci” nin dizinini nasıl alabilirim?


14

Varsayalım 0ve 1yalnızca özel olarak erişilebilen iki kaynağım var .

xargsÜcretsiz bir karşılıklı dışlama hizmeti olarak kullanmak için başlatılan "paralel işlemci" nin "dizinini" kurtarmanın herhangi bir yolu var mı ? Örneğin, aşağıdaki paralel hesaplamayı göz önünde bulundurun:

$ 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

Sorum şu ki index, çıktının nereye benzeyeceği sihirli bir kelime var mı

$ 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

tek garanti, kaynağı 0ve aynısını kullanan en fazla bir işlemin olmasıdır 1. Temel olarak, bu endeksi sadece kendisine anlatılan kaynağı kullanmak için kurala saygı duyacak olan alt sürece iletmek istiyorum.

Elbette, bunu ikiden fazla kaynağa yaymak tercih edilir. Belgeleri incelemek, xargsmuhtemelen bunu yapamaz. Minimum eşdeğer bir çözüm var mı? Dosyaları sahte kilit olarak kullanmak / temizlemek tercih edilmez.

Yanıtlar:


19

Eğer kullanıyorsanız GNU xargs , var --process-slot-var:

--process-slot-var= Çevre değişken adı
Seti ortam değişkeni çevre değişken adı her çalışan çocuk sürecinde eşsiz bir değere. Her değer ondalık bir tamsayıdır. Alt işlemler çıktıktan sonra değerler yeniden kullanılır. Bu, örneğin temel bir yük dağıtım şemasında kullanılabilir.

Yani mesela:

~ 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.