2024-04-24 03:16:14 发布
网友
我使用的是来自Github的html2text,我可以使用for file in *.html; do html2text "$file" > "$file.txt"; done在我的文件夹中的所有.html文件上运行它,但是它有点慢。如何在所有.html文件上使用html2text和parallel?你知道吗
html2text
for file in *.html; do html2text "$file" > "$file.txt"; done
.html
最初的答案是:
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可以减少一半以上的时间。你知道吗
parallel
最初的答案是:
命令末尾的符号告诉bash将命令放在后台,并将控制权返回到调用位置。你知道吗
不确定它是否能很好地处理1000个文件,因为它会为每个文件生成一个新的进程。你知道吗
然而,由于OP要求它能处理数百万个文件,这显然是不可行的,因为它会产生数百万个后台进程,可能会挂起机器。你知道吗
您需要了解的是,处理数以百万计的文件将花费更多的时间,具体取决于您的硬件和操作系统限制。技术上比单个文件多一百万倍
上面的答案似乎可以立即处理100个文件,这是因为您立即得到了命令提示符。但是,这并不意味着工作在那一点上就完成了,因为所有这些后台进程可能在它们完成之前仍然在工作,即使您可以同时做其他事情。你知道吗
从理论上讲,您可以将文件列表划分为块并逐块工作,但是,在测试了这种方法之后,我认为您获得最终结果的速度不会比并行处理快得多。你知道吗
因此,根据您必须处理的文件数量,我会建议根据您自己的发现运行并行,但可能会显著调整并行作业的数量。
所以像这样的方法应该行得通:
注意,这是OP的Python版html2text的语法。有关使用例如Ubuntu发行版提供的html2text二进制软件包的选项,请参阅前面的答案编辑。你知道吗
这将把你的html分成1000个并行文件的块,而不使用管道(这有时会大大降低速度)。你知道吗
如果这太慢了,试着把-j增加到10000,但是你会冒险进入硬件/操作系统的限制,因为一直有10000个并行进程产生。你知道吗
对于其他处于类似情况的人,使用
parallel
可以减少一半以上的时间。你知道吗相关问题 更多 >
编程相关推荐