使用p运行html2text

2024-04-24 03:16:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是来自Githubhtml2text,我可以使用for file in *.html; do html2text "$file" > "$file.txt"; done在我的文件夹中的所有.html文件上运行它,但是它有点慢。如何在所有.html文件上使用html2text和parallel?你知道吗


Tags: 文件ingithubtxt文件夹forparallelhtml
2条回答

最初的答案是:

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

命令末尾的符号告诉bash将命令放在后台,并将控制权返回到调用位置。你知道吗

不确定它是否能很好地处理1000个文件,因为它会为每个文件生成一个新的进程。你知道吗


然而,由于OP要求它能处理数百万个文件,这显然是不可行的,因为它会产生数百万个后台进程,可能会挂起机器。你知道吗

您需要了解的是,处理数以百万计的文件将花费更多的时间,具体取决于您的硬件和操作系统限制。技术上比单个文件多一百万倍

上面的答案似乎可以立即处理100个文件,这是因为您立即得到了命令提示符。但是,这并不意味着工作在那一点上就完成了,因为所有这些后台进程可能在它们完成之前仍然在工作,即使您可以同时做其他事情。你知道吗

从理论上讲,您可以将文件列表划分为块并逐块工作,但是,在测试了这种方法之后,我认为您获得最终结果的速度不会比并行处理快得多。你知道吗

因此,根据您必须处理的文件数量,我建议根据您自己的发现运行并行,但可能会显著调整并行作业的数量。

所以像这样的方法应该行得通:

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

注意,这是OP的Python版html2text的语法。有关使用例如Ubuntu发行版提供的html2text二进制软件包的选项,请参阅前面的答案编辑。你知道吗

这将把你的html分成1000个并行文件的块,而不使用管道(这有时会大大降低速度)。你知道吗

如果这太慢了,试着把-j增加到10000,但是你会冒险进入硬件/操作系统的限制,因为一直有10000个并行进程产生。你知道吗

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

相关问题 更多 >