내가 정말로하려는 것은 API 경쟁 조건을 테스트하기 위해 X 개의 작업을 병렬로 실행하는 것입니다.
나는 이것을 생각 해냈다
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 번 실행될 것입니다.
한 번에 4 개의 프로세스를 원합니다. 각 프로세스는 1 개의 레코드를 처리해야합니다.
parallel -j4 -k --no-notice 'echo "{}"' ::: {1..10}
-j4
-작업 슬롯의 수. 최대 4 개의 작업을 병렬로 실행
-k
-출력 순서를 입력 순서와 동일하게 유지합니다. 일반적으로 작업이 완료되는 즉시 작업 출력이 인쇄됩니다.
:::
-인수
출력 :
1
2
3
4
5
6
7
8
9
10
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다