xargs
약 3 천만 개의 작은 파일을 처리하기 위해 파이썬 스크립트를 호출하는 데 사용 하고 있습니다. xargs
프로세스를 병렬화하는 데 사용 하고 싶습니다 . 내가 사용하는 명령은 다음과 같습니다
find ./data -name "*.json" -print0 |
xargs -0 -I{} -P 40 python Convert.py {} > log.txt
기본적으로 Convert.py
작은 json 파일 (4kb) 을 읽고 처리하고 다른 4kb 파일에 씁니다. CPU 코어가 40 개인 서버에서 실행 중입니다. 그리고이 서버에서 다른 CPU 집약적 프로세스가 실행되고 있지 않습니다.
htop (btw, CPU 성능을 모니터링하는 다른 좋은 방법이 있습니까?)을 모니터링하면 -P 40
예상만큼 빠르지 않습니다. 때로는 모든 코어가 3-4 초 동안 얼고 거의 0으로 감소한 다음 60-70 %로 복구됩니다. 그런 다음 병렬 프로세스 수를로 줄이려고 시도 -P 20-30
했지만 여전히 빠르지는 않습니다. 이상적인 동작은 선형 속도 향상이어야합니다. xargs의 병렬 사용에 대한 제안?
xargs -P
하고 >
있기 때문에 하프 라인 문제의 경쟁 조건에 대한 개방되어 gnu.org/software/parallel/... GNU는 그런 문제가되지 않습니다 대신 병렬 사용.