У меня есть текстовый файл 8 ГБ, и я должен запустить скрипт 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

1 ответ1

2

Я думаю, что вам нужно предоставить более подробную информацию об ограничениях - например, должен ли вывод в convert.txt быть в том же порядке, что и before.txt, сколько времени занимает каждый разбор скрипта python? Если порядок вывода не зависит от ввода, вы можете сделать это, создав фоновые процессы и запустив их количество в каждом цикле - число, которое, я полагаю, зависит от того, сколько потоков будет обрабатывать ваш процессор.

Что-то вроде следующего может (или не может) соответствовать вашим целям:

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

Примечания: Это предполагает, что ваш файл Python может обрабатывать пустые входные данные (т. Е. Если количество команд, не делимых точно на число потоков, будут иметь несколько пустых строк - вы всегда можете проверить это перед выполнением внутреннего цикла.

Этот скрипт предполагает, что вы не заботитесь о порядке вывода.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .