xargs를 사용하여 메시지로 프로그램 실행
현재 펼쳐져 있습니다.
#!/bin/bash
# script.sh
for i in {0..99}; do
script-to-run.sh input/ output/ $i
done
xargs를 사용하여 전송로 실행하고 싶습니다. 나는 시도했다
script.sh | xargs -P8
그러나 위의 작업은 한 번에 한 번만 실행됩니다. -n8도 운이 없습니다. 펼쳐서 루프에서 연장 행 끝에 &를 추가하면 펼쳐집니다. 한 번에 8 개, 총 100 개까지만 루프를 실행하는 방법은 무엇입니까?
로부터 xargs
매뉴얼 페이지
이 매뉴얼 페이지는 xargs의 GNU 버전을 문서화합니다. xargs는 공백 (큰 따옴표 또는 작은 따옴표 또는 백 슬래시로 보호 될 수 있음) 또는 줄 바꿈으로 구분 된 표준 입력에서 항목을 읽고 그 모든 이니셜-인수와 함께 명령 번 이상을 실행합니다. 표준 입력에서 읽은 항목별로 다릅니다. 표준 입력의 빈 줄은 무시됩니다.
즉, 예제 xargs
에서는 전개의 모든 출력을 기다리고 수집 한 다음 echo <that output>
. 그다지 유용하지도 않고 원하는 것이 아닙니다.
-n
인수는 입력으로부터 많은 항목이 (여기 전달 처리에 대해, 그 자체로, 아무것도) 실행하지 않고 각 명령을 사용하는 방법입니다.
당신이 원하는 것을 말하는 것을 다음 xargs
과 같은 것을해야 할 것입니다.
printf %s\\n {0..99} | xargs -n 1 -P 8 script-to-run.sh input/ output/
이렇게 분해됩니다.
printf %s\\n {0..99}
-에서0
까지 한 줄에 하나씩 번호를 인쇄 합니다99
.- 운영
xargs
- 대부분 에서 실행 명령 한 줄에 하나씩 인수
- 번에 한 최대 8 프로세스 개의 실행
GNU Parallel을 사용하면 다음을 수행 할 수 있습니다.
parallel script-to-run.sh input/ output/ {} ::: {0..99}
-P8
오는가 않은 경우 추가CPU 당 하나의 코어 작업을 실행 려면 .
반대로 xargs
입력 입력에 공백 '또는'(여기서는 해당되지 않음)이 포함되어 있어도 올바른 작업을 수행 합니다 . 또한 다른 작업의 출력이 함께 혼합 되지 않도록합니다 . 따라서 출력을 사용하면 두 가지 다른 직업에서 반 라인을 얻지 것입니다.
GNU Parallel은 일반적인 시스템 또는 ssh 액세스 권한이있는 여러 시스템에서 작업을 쉽게 사용할 수 있습니다.
4 개의 CPU에서 실행하려는 32 개의 서로 다른 작업이있는 경우보고 화하는 간단한 방법은 각 CPU에서 8 개의 작업을 실행하는 것입니다.
대신 GNU 병렬은 하나가 완료되면 새 프로세스를 생성하여 CPU를 활성 상태로 유지하여 시간을 절약합니다.
설치
GNU Parallel이 배포 용으로 패키징되지 않은 경우 루트 액세스가 필요하지 않은 개인 설치를 수행 할 수 있습니다. 다음을 수행하여 10 초 서열 완료 할 수 있습니다.
$ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
fetch -o - http://pi.dk/3 ) > install.sh
$ sha1sum install.sh | grep 3374ec53bacb199b245af2dda86df6c9
12345678 3374ec53 bacb199b 245af2dd a86df6c9
$ md5sum install.sh | grep 029a9ac06e8b5bc6052eac57b2c3c9ca
029a9ac0 6e8b5bc6 052eac57 b2c3c9ca
$ sha512sum install.sh | grep f517006d9897747bed8a4694b1acba1b
40f53af6 9e20dae5 713ba06c f517006d 9897747b ed8a4694 b1acba1b 1464beb4
60055629 3f2356f3 3e9c4e3c 76e3f3af a9db4b32 bd33322b 975696fc e6b23cfb
$ bash install.sh
다른 설치 옵션은 http://git.savannah.gnu.org/cgit/parallel.git/tree/README를 참조하십시오.
더 알아보기
더 많은 예보기 : http://www.gnu.org/software/parallel/man.html
소개 동영상보기 : https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
안내보기 : http://www.gnu.org/software/parallel/parallel_tutorial.html
지원을위한 이메일 목록에 등록 : https://lists.gnu.org/mailman/listinfo/parallel
참고 URL : https://stackoverflow.com/questions/28357997/running-programs-in-parallel-using-xargs
'ProgramingTip' 카테고리의 다른 글
Git- 원격 저장소에서 파일을 삭제하는 방법 (0) | 2020.11.23 |
---|---|
크기에 맞게 확대 : HTML에 PDF 포함 (0) | 2020.11.23 |
reCAPTCHA 오류 : 사이트 키에 대한 잘못된 도메인 (0) | 2020.11.23 |
자바 펼쳐 함수에서 'undefined'또는 'null'을 반환하는 것이 더 낫습니까? (0) | 2020.11.23 |
INPUT 태그의 ID 속성을 어떻게 사용할 수 있습니까? (0) | 2020.11.23 |