假设我有两个资源,名为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
:因此,例如: