【问题标题】:gnu parallel vs multiprocessinggnu 并行与多处理
【发布时间】:2019-09-18 12:54:49
【问题描述】:

GNU-parallel 和 python multiprocessing 模块有什么区别?如果它们的用法不同,那么哪一个最适合哪种情况。

我正在尝试并行化 tesseract,发现有人在 tesseract 问题上推荐 GNU parallel here

我想了解哪一个最适合哪个用例,然后再选择另一个。

另外,我没有从 gnu-parallel 获得想要的结果,我可以看到 top 中运行了 4 个进程,但它们比 python 多处理花费更多的时间。

1)对于 gnu 并行:

here所示,所用时间为 8 分 40 秒

我正在使用以下命令:

ls image*.jpg | time parallel tesseract {} stdout -l hin

顶部输出here

2) 使用多页功能的普通 Tesseract。

$ time tesseract imagelist.txt stdout -l hin

速度可见here

3) 基于多处理的 pytesseract

将速度提高到大约 4-5 秒。

可以找到我的pdf here

我正在使用convert_from_path from pdf2imageconvert from imagemagickpdf 转换为image 作为pngjpeg

【问题讨论】:

  • 鉴于 GNU Parallel 需要 8 分 40 秒,而普通的多页 tesseract 需要 0 分 12 秒,我认为他们没有做同样的事情。时间差简直太大了。如果您使用 GNU Parallel 运行第一次运行,也许 tesseract 以某种方式缓存了输出,而其他运行则简单地使用了缓存。
  • @OleTange:嗨,Ole 感谢您的回复!我不认为,所以问题出在缓存上(虽然我不明白这是怎么发生的,并且很想知道更多),因为我的朋友没有 gnu-parallel 安装速度相同。我仍然在想我可能错误地使用了gnu-parallel,或者其他一些原因。我可以在这里链接到 pdf 或图像,如果您想自己测试它们,这也会有很大的帮助。
  • 请做。这样问题就会成为 MCVE。
  • @OleTange :我在底部的问题中添加了 pdf 链接
  • 哇!我实际上可以重现您的发现:tesseract 变得非常缓慢。如果你运行--tty -j+0,它会更快,但多页功能是最快的。

标签: python multiprocessing tesseract gnu-parallel


【解决方案1】:

在 python 多处理中,您可以在进程之间进行通信。但是你有同步的成本。 gnu pararell 使用不同的参数多次运行命令。然后您需要在其他过程中汇总结果。

【讨论】:

  • 当我尝试将 tesseractgnu-parallel 一起使用时,我可以看到创建了 4 个 tesseract 作业,并且所有内核的 CPU 接近 100%,但我没有得到加速?我不明白为什么。说,我创建了 4 个图像,我使用:ls image*.jpg | time parallel tesseract {} stdout -l hin
  • 可能有几个原因。如果tesseract 在添加新作业中是并行的,则不会提高速度。第二件事是访问硬盘驱动器。硬盘驱动器具有最大的读取/保存数据的种子。如果一个进程耗尽了这个限制,那么添加下一个进程可能会减慢操作。此外,软件开发人员的某些特定决定可能会产生多个实例的问题(一些有限的资源,例如数据文件被一个进程阻塞)
猜你喜欢
  • 2012-08-31
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 2017-01-27
  • 2014-05-05
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
相关资源
最近更新 更多