xargs“병렬 프로세서”의 색인을 어떻게 얻을 수 있습니까?


14

독점적으로 만 액세스 할 수 있는 두 개의 리소스 (이름 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아마도이 작업을 수행 할 수 없습니다. 최소한의 동등한 솔루션이 있습니까? 파일을 가짜 잠금으로 사용 / 청소하는 것은 바람직하지 않습니다.

답변:


19

당신이 사용하는 경우 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.