8GB txt 파일이 있고 파일의 각 줄에 대해 python 스크립트를 실행하고 출력의 일부를 저장해야합니다.
bash에서 이것을 더 빠르게 실행하기 위해 이것을 여러 프로세스로 나눌 수있는 방법이 있습니까?
내 현재 bash 스크립트는 다음과 같습니다.
#!/bin/bash
filename='before.txt'
while read p; do
python py-hex.py $p | sed -n -e '/^qter/p' | sed 's/qter: //g' >> converted.txt
done < $filename
답변
예를 들어 변환 된 .txt의 출력이 ‘before.txt’와 동일한 순서이어야합니까? 예를 들어 파이썬 스크립트의 각 구문 분석에 걸리는 시간은 무엇입니까? 출력 순서가 입력에 따라 달라지지 않으면 프로세스를 백그라운드로 지정하고 각 루프에서 프로세스 수를 시작 하여이 작업을 수행 할 수 있습니다-CPU가 처리하는 스레드 수에 따라 다릅니다.
다음과 같은 것이 목적에 맞거나 맞지 않을 수 있습니다.
#! /bin/bash
threads=4;
threads=$(( $threads - 1))
while read filein
do
python py-hex.py $filein | sed -n -e '/^qter/p' | sed 's/qter: //g' >> converted.txt &
for thread in `seq $threads`
do
read filein
python py-hex.py $filein | sed -n -e '/^qter/p' | sed 's/qter: //g' >> converted.txt &
done
done < $filename
참고 : 이것은 파이썬 파일이 빈 입력을 처리 할 수 있다고 가정합니다 (즉, 명령 수를 스레드 수로 정확하게 나눌 수없는 명령 수에 빈 줄이 있으면 내부 루프를 실행하기 전에 항상이를 확인할 수 있습니다).
이 스크립트는 출력 순서에 신경 쓰지 않는다고 가정합니다.