使用并行运行html2text

时间:2018-07-05 05:33:12

标签: python html linux terminal parallel-processing

我正在使用Github中的html2text,可以在其中使用.html在文件夹中的所有for file in *.html; do html2text "$file" > "$file.txt"; done文件上运行它,但这有点慢。如何在所有.html文件上并行使用html2text?

2 个答案:

答案 0 :(得分:1)

原始答案是:

for file in *.html
do
    html2text "$file" > "$file.txt" & 
done

命令末尾的&符号告诉bash将命令放在后台并将控件返回到调用位置。

不确定会否对1000个文件有效,因为它将为每个文件产生一个新进程。


但是,由于OP要求它可以处理数百万个文件,因此这显然是不可行的,因为它会产生数百万个后台进程,并有可能使计算机挂起。

您需要了解的是,处理数百万个文件 Will 会花费更多时间,这完全取决于您的硬件和操作系统限制。从技术上讲,比单个文件多一百万次。

上面的答案似乎立即为您处理100个文件的原因,是因为您立即获得了命令提示符。但是,这不是并不意味着该工作已经完成,因为即使您可以同时执行其他操作,所有这些后台过程也可能仍在工作直到完成。

从理论上讲,您可以将文件列表分成多个块,然后逐个工作地进行工作,但是,在测试这种方法之后,我认为最终结果不会比并行处理快得多。

因此,根据您必须处理的文件数,我建议根据您自己的发现并行运行,也许可以通过大量调整并行作业的数量来实现。

所以这样的事情应该起作用:

find . -type f -name \*html > FLIST
parallel --a FLIST -j 1000 'html2text {} > {.}.txt'

注意,这是OP的html2text的Python版本的语法。对于使用例如的选项。 Ubuntu发行版提供了html2text二进制软件包,请参见答案的先前编辑。

这将在1000个并行文件的块中执行html,并且不使用管道(有时会大大降低速度)。

如果这太慢了,请尝试将-j增加到10000-但是您会遇到硬件/操作系统的局限性,即始终产生10000个并行进程。

答案 1 :(得分:0)

对于处于类似情况的其他人,使用parallel可以将时间减少一半以上。