작업 출력이 손상되는 것을 원하지 않기 때문에 GNU 병렬 버퍼 std/stderr을 알고 있지만 다음을 parallel do_something ::: task_1 task_2 task_3
사용하여 작업을 실행하면
Parallel이 이 문제를 해결하지 못하면 해결할 수 있는 다른 유사한 프로그램이 있습니까?
답변1
버전 20160422부터 다음을 수행할 수 있습니다.
parallel -k --lb do_something ::: task_1 task_2 task_3
답변2
parallel
실제로 출력을 순차적으로 만드는 데에는 아무런 제한이 없습니다. 공교롭게도 작업은 일반적으로 충분히 작으며 CPU 시간은 순서대로 발생하도록 균등하게 분배됩니다. 많은 수의 작업을 실행하거나 해당 작업 기간이 크게 다를 때 이 사실을 더 많이 알 수 있습니다.
기본적으로 parallel
CPU 코어 수만큼만 작업이 실행됩니다. 대부분의 노트북과 데스크탑에서 이 숫자는 2-4입니다. 이는 한 번에 몇 가지 작업만 실행한다는 의미입니다. -j를 사용하여 늘릴 수 있습니다.
다음은 작업 주문이 제출된 순서대로 출력되지 않음을 보여주는 예입니다.
seq 20 | parallel -j 20 'sleep $[RANDOM % 20]; echo '
내 시스템의 출력은 다음과 같습니다(시스템은 다를 수 있음).
7
3
13
20
8
16
2
4
18
17
1
5
9
14
12
6
10
19
11
15
seq 20
숫자 1-20을 출력하는 명령입니다. 나는 그것을 병렬로 연결하고 20개의 작업을 동시에 실행하여 모든 작업이 동시에 시작되도록 했습니다. 'sleep $[\[RANDOM][1] % 20];
sleep과 zsh 매개변수를 함께 사용하면 1에서 20 사이의 난수를 반환합니다. 각 작업은 해당 nonce에서 절전 모드로 전환된 다음 echo
작업이 에코되면 출력을 병렬로 받게 됩니다.
당신은 또한 다음 과 같은 parallel --shuf
일을 할 수 있습니다작업 순서 중단.