【问题标题】:Bash: Is it possible to reserve memory for a specific applicationBash:是否可以为特定应用程序保留内存
【发布时间】:2020-06-08 18:41:57
【问题描述】:

在我的一个 bash 函数中,我使用以下代码通过管道将 ImageMagick 的转换输出发送到 tesseract-ocr 以转换为文本:

for a in ocr/*.tif*; do
  echo $a $(date +%T)
  for i in 2 4 8; do
    echo $a >> $i.txt
    convert $a -resize "$i"00% - | tesseract stdin q 2> /dev/null
    cat q.txt >> $i.txt
  done
  mv $a dun/
done

只要在函数运行时我什么都不做,它就可以正常工作。

但任何其他用途都会导致 ImageMagick 生成临时文件,而不是使每个输入文件的处理时间增加一倍以上。我认为这是因为它在 convert 运行时反对某些新应用程序对内存的使用。 bash 中是否有任何方法可以保留内存的特定部分供一个应用程序独占使用?

【问题讨论】:

  • 我非常怀疑 ImageMagick 的行为是否会因系统上运行的其他内容而有所不同(使用更多 RAM 或磁盘空间)。您有什么证据表明这种情况正在发生?
  • 这是操作系统问题,不是编程问题。
  • Thomas,我引用:“......只要在函数运行时我什么都不做,就可以正常工作。但是任何其他用途都会导致 ImageMagick 生成临时文件,而不是使每个输入文件的处理时间。”
  • Bamar,您也没有解决所提出的问题。我引用“在 bash 中是否有任何方法可以保留内存的特定部分供一个应用程序独占使用?”

标签: bash memory pipe tesseract imagemagick-convert


【解决方案1】:

显然命令“nice”是解决这个问题的工具。我注意到这个命令的处理时间后发布了这个问题

convert $a -resize "$i"00% - | tesseract stdin q 2> /dev/null

从在系统上没有其他活动的情况下每个输入文件大约 1.5 分钟更改为当我同时对我的网络浏览器进行多个屏幕截图时每个输入文件大约 3.3 分钟。

所以我把命令改成

sudo nice -n -20 convert $a -resize "$i"00% - | tesseract stdin q 2> /dev/null

对于最新的批次,我看到我的平均输入文件时间从大约 1 分钟变为 1.25 分钟,同时再次对浏览器进行多个屏幕截图。

【讨论】:

    猜你喜欢
    • 2020-07-10
    • 2013-08-06
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 2016-07-16
    • 2020-10-15
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多