【问题标题】:Run html2text using parallel使用并行运行 html2text
【发布时间】:2018-07-05 05:33:12
【问题描述】:

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

【问题讨论】:

  • 您首先可以访问并行硬件吗?
  • 什么硬件?

标签: python html linux terminal parallel-processing


【解决方案1】:

原来的答案是:

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 二进制包,请看之前编辑的答案。

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

如果这太慢,请尝试将 -j 增加到可能 10000 —— 但随后您将冒险进入硬件/操作系统的限制,即始终产生 10000 个并行进程。

【讨论】:

  • @mrM 不,不是,如果您费心阅读答案,它在正确的位置有一个 & 符号
  • 我的错误,您的代码几乎立即生成了 html2text 输出。谢谢大佬!
  • Gnudiff 您的代码可以立即在第 100 个文件上运行,但是当我测试数百万个文件时,它会以某种方式变慢。有没有办法设置文件块,或者将我的 1,000,000 个文件分成每个文件夹 100 个文件,然后在每个文件夹上运行此代码?
  • 我想了想,是的,有办法,等我在电脑上的时候再贴一下
  • 运行第二个代码行时,我得到parallel: Error: A semaphore does not take input from neither stdin nor a file
【解决方案2】:

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

【讨论】:

  • 那么您是否尝试过我的答案的更新版本并且您是否尝试过调整 -j 参数?
  • 我已经尝试过来自 Ubuntu 存储库的版本,即使经过调整,它仍然非常糟糕和错误。 Github 的 html2text 版本更好,并行减少了约 2-3 倍的时间。
  • Gnudiff 是否可以在转换后删除每个 .html 文件?运行时parallel --a FLIST -j 4 'html2text {} > {.}.txt'
  • 原则上是另一个问题,但是应该是可以的,我会补充细节。如果我的回答对你有用,顺便说一句,请接受。
  • 这应该适用于处理后删除文件,但只有当 html2text 成功退出时才有效(处理文件时没有错误):parallel --a FLIST -j 1000 'html2text {} > {.}。文本 && rm {}'
猜你喜欢
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 2015-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多