[ruby-list:50922] Re: RMagic でキャッシュリソースあふれを回避したいのですが
From:
坂根佑介 <yusuke.sakane@...>
Date:
2021-03-16 06:04:51 UTC
List:
ruby-list #50922
初めまして。坂根と申します。
Magick::Image.read の呼び出しに対して、closeに纏わる処理を呼び出されていないことが気になりました。
Magick::Image#destroy! を使ってみられてはいかがでしょうか。
https://www.rubydoc.info/gems/rmagick/Magick%2FImage:destroy!
未検証の中の回答で恐縮ですが、何か解決のヒントに繋がると幸いです。
2021年3月16日(火) 13:42 konami <konami@kyoto-wu.ac.jp>:
>
> いつもお世話になっています。表題の通りです。
> 大量のスキャンデータを処理するために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から使えるのなら利用したいのですが,何か方法はないものでしょうか。ヒントでもいただけると幸いでです。
>
> 小波秀雄
>