[ruby-list:50921] RMagic でキャッシュリソースあふれを回避したいのですが
From:
konami <konami@...>
Date:
2021-03-16 04:42:19 UTC
List:
ruby-list #50921
いつもお世話になっています。表題の通りです。
大量のスキャンデータを処理するためにRMagickを使おうとして失敗してしまいました。
ソース:
require "rmagick"
parity = 0
Dir.glob("*jpeg").each do |jpg|
/(\d*)\.j/ =~ jpg
if $1.to_i % 2 == parity
puts jpg
img = Magick::Image.read(jpg)[0]
img.rotate(180)
end
end
ナンバリングされているファイルのうち偶数番のファイルを180度回転させようというものですが,
走らせると途中で止まります。
> ./rotateImage.rb
Check0002.jpeg
(中略)
Check0010.jpeg
Traceback (most recent call last):
3: from ../rotateImage.rb:4:in `<main>'
2: from ../rotateImage.rb:4:in `each'
1: from ../rotateImage.rb:8:in `block in <main>'
../rotateImage.rb:8:in `read': cache resources exhausted
`Check0010.jpeg' @ error/cache.c/OpenPixelCache/4083
(Magick::ImageMagickError)
このエラーは ImageMagick
が設定している最大のキャッシュを使い切ってしまうということのようで,設定ファイルをいじって
1 GiB に増やしましたが,解決にはなりませんでした。
https://blog.myanote.com/post/529
ファイルを処理したらメモリを開放する方法でもないのかと思ってRMagickのドキュメントを見たのですが,分かりませんでした。
https://rmagick.github.io/usage.html
せっかくRubyから使えるのなら利用したいのですが,何か方法はないものでしょうか。ヒントでもいただけると幸いでです。
小波秀雄