GNU 병렬: 작업 순서에 따라 stderr/stdout 작업을 한 번에 하나씩 즉시 표시합니다.

GNU 병렬: 작업 순서에 따라 stderr/stdout 작업을 한 번에 하나씩 즉시 표시합니다.

작업 출력이 손상되는 것을 원하지 않기 때문에 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 시간은 순서대로 발생하도록 균등하게 분배됩니다. 많은 수의 작업을 실행하거나 해당 작업 기간이 크게 다를 때 이 사실을 더 많이 알 수 있습니다.

기본적으로 parallelCPU 코어 수만큼만 작업이 실행됩니다. 대부분의 노트북과 데스크탑에서 이 숫자는 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일을 할 수 있습니다작업 순서 중단.

관련 정보