Xargs
如何獲取 xargs“並行處理器”的索引?
假設我有兩個資源,名為
0
和1
,只能以獨占方式訪問。有沒有辦法恢復
xargs
啟動的“並行處理器”的“索引”,以便將其用作免費互斥服務?例如,考慮以下並行計算:$ 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
我的問題是是否存在一個神奇的詞,比如說
index
,輸出看起來像$ 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
唯一的保證是,最多只有一個程序使用資源
0
,並且對於1
. 基本上,我想將此索引傳達給子程序,該子程序會遵守規則,只使用它被告知的資源。當然,最好將其擴展到兩個以上的資源。檢查文件,
xargs
可能無法做到這一點。有最小的等效解決方案嗎?使用/清理文件作為假鎖是不可取的。
如果您使用的是GNU xargs,則有
--process-slot-var
:
--process-slot-var
= environment-variable-name將環境變數environment-variable- name 設置為每個正在執行的子程序中的唯一值。每個值都是一個十進制整數。一旦子程序退出,值就會被重用。例如,這可以用於基本的負載分配方案。
因此,例如:
~ 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