多线程 Bash 脚本

多线程 Bash 脚本

我有一个 8 GB 的 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

答案1

我认为您需要提供有关限制的更多细节 - 例如,converted.txt 中的输出是否需要与“before.txt”的顺序相同,每次解析 python 脚本需要多长时间?如果输出顺序不取决于输入,您可以通过后台进程并在每个循环中启动多个进程来做到这一点 - 我猜这个数字取决于您的 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

注意:这假设你的 python 文件可以处理空输入(即,如果命令的数量不能被线程数完全整除,那么就会有一些空行 - 你可以在执行内部循环之前始终对此进行检查。

该脚本假设您不关心输出顺序。

相关内容