Bash 스크립트 멀티 스레딩


0

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

답변:


2

예를 들어 변환 된 .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

참고 : 이것은 파이썬 파일이 빈 입력을 처리 할 수 ​​있다고 가정합니다 (즉, 명령 수를 스레드 수로 정확하게 나눌 수없는 명령 수에 빈 줄이 있으면 내부 루프를 실행하기 전에 항상이를 확인할 수 있습니다).

이 스크립트는 출력 순서에 신경 쓰지 않는다고 가정합니다.


p, 그런 것. 잘 작동합니다. 여전히 이것을 테스트하지만 조금 더 빨리 작동하는 것 같습니다. 당신의 도움을 주셔서 감사합니다!
Liviu ZeJah
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.