각 작업 레코드에서 GNU 병렬 실행 방법, 코어당 1개의 프로세스

각 작업 레코드에서 GNU 병렬 실행 방법, 코어당 1개의 프로세스

제가 정말로 원하는 것은 X개의 작업을 실행하고 X개의 작업을 병렬로 실행하여 API 경합 조건을 테스트하는 것입니다.

나는 이것을 생각해 냈다.

echo {1..10} | xargs -n1 | parallel -m 'echo "{}"';

인쇄

7 8 9
10
4 5 6
1 2 3

그런데 제가 정말 보고 싶은 건 (노트순서는 크게 상관없습니다.)

1
2
3
4
5
6
7
8
9
10

이는 한 번에 4개(또는 내가 가지고 있는 CPU/코어 수에 관계없이)를 병렬로 처리됩니다 --jobs 4. 총 10번의 개별 실행.

나는 이것을 시도했다

echo {1..10} | xargs -n1 | parallel --semaphore --block 3  -m 'echo -n "{} ";

하지만 한 번만 인쇄되는 것 같습니다. 솔루션에 xargs가 필요하지 않은 경우 이는 기본 레코드 구분 기호가 줄 바꿈이라는 아이디어를 해킹하는 것처럼 보이지만 원하는 대로 작동할 공간도 얻을 수 없습니다.

10상당히 작은 숫자이지만 훨씬 더 크다고 할 수 있습니다.1000

echo {1..1000} | xargs -n1 | parallel -j1000

인쇄

parallel: Warning: Only enough file handles to run 60 jobs in parallel.
parallel: Warning: Running 'parallel -j0 -N 60 --pipe parallel -j0' or
parallel: Warning: raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf
parallel: Warning: or /proc/sys/fs/file-max may help.

나는 실제로 1000개의 프로세스를 원하지 않고 한 번에 4개의 프로세스를 원하며 각 프로세스는 1개의 레코드를 처리해야 하므로 완료되면 1000번 실행됩니다.

답변1

한 번에 4개의 프로세스를 원하며 각 프로세스는 1개의 레코드를 처리해야 합니다.

parallel -j4 -k --no-notice 'echo "{}"' ::: {1..10}
  • -j4- 직위 수. 최대 4개의 작업을 동시에 실행

  • -k- 출력 순서는 입력 순서와 동일하게 유지하세요. 일반적으로 작업 출력은 작업이 완료되자마자 인쇄됩니다.

  • :::- 논쟁


산출:

1
2
3
4
5
6
7
8
9
10

답변2

seq 10 | parallel -j4 echo {}

또는 코어가 4개 있는 경우:

seq 10 | parallel echo

관련 정보