[英]Run html2text using parallel
我正在使用来自Github的 html2text
,我可以在文件夹中的所有.html
文件上运行它,并使用for file in *.html; do html2text "$file" > "$file.txt"; done
for file in *.html; do html2text "$file" > "$file.txt"; done
for file in *.html; do html2text "$file" > "$file.txt"; done
但是有些慢。 如何在所有.html
文件中并行使用html2text?
最初的答案是:
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的html2text的Python版本的语法。 对于使用例如的选项。 Ubuntu发行版提供了html2text二进制包,请参见答案的先前编辑。
这将以1000个并行文件的块的形式执行html,而不使用管道(有时可能会大大减慢速度)。
如果这太慢,请尝试将-j增加到10000-但是您会遇到硬件/操作系统的局限性,即始终产生10000个并行进程。
对于处于类似情况的其他人,使用parallel
可将时间减少一半以上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.