使用命名管道时出现"Too many open files"错误



我正在运行 2 个脚本,过了一会儿,我Too many open files @ error/blob.c/ImageToFile/1832了。

第一个脚本的简化版本。它应该读取写入image_pipe的图像,处理它们,并将它们写入ocr_pipe以供 OCR 读取。

# creates 2 named pipes
File.mkfifo(image_pipe) rescue nil
File.mkfifo(ocr_pipe) rescue nil
while image = Image.read(image_pipe)
  # do some stuff with `image`...
end

第二个脚本是使用 ffmpeg 从视频中提取帧,将它们写入image_pipe

# image_pipe is the same as the script above.
(14..movie.duration).step(0.5) do
  `/usr/local/bin/ffmpeg [some options...] #{image_pipe}`
end

我认为问题是 RMagick 在读取第一个脚本循环中的图像时打开了太多文件描述符,但我不确定如何阻止这种情况发生。Magick::Image类没有close方法或任何东西,afaik。

我没有

找到问题的根本原因,但是ulferts帮助我找到了我可以接受的解决方法。

与其让 RMagick 打开文件本身,不如我们自己处理它,然后使用 .from_blob 创建Magick::Image实例。

while f = File.read(image_pipe)
  image = Image.from_blob(f)
  # ... do stuff with image.
end

相关内容

  • 没有找到相关文章

最新更新