Multithreading a Bash Script

0

Eu tenho um arquivo txt de 8 GB e tenho que executar um script python para cada linha no arquivo e salvar parte da saída.

Existe alguma maneira de dividir isso em vários processos para torná-lo mais rápido, no bash?

Aqui está o meu script atual:

#!/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
    
por Liviu ZeJah 06.10.2015 / 23:49

1 resposta

2

Eu acho que você precisa fornecer mais detalhes sobre os limites - por exemplo, a saída em convert.txt precisa estar na mesma ordem que 'before.txt', quanto tempo cada análise do script python demora? Se a ordem de saída não for contingente na entrada, você poderá fazer isso colocando em segundo plano os processos e lançando um número deles em cada loop - o número dependendo, eu acho, de quantos threads sua CPU irá tratar.

Algo como o seguinte pode (ou não) ser adequado ao seu objetivo:

#! /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

Notas: Isso pressupõe que seu arquivo python pode manipular entradas vazias (ou seja, se o número de comandos não exatamente divisíveis pelo número de threads existirão algumas linhas vazias - você sempre pode verificar isso antes de executar o loop interno.

Este script presume que você não se importa com a ordem de saída.

    
por 07.10.2015 / 01:04