Ruby zawiesza się podczas generacji obrazków

Witajcie.
Piszę program w Ruby, który generuje mi obrazki - konkretnie 5036 obrazków o wymiarach 128x128.
Posiadam macierz 5036x64, w której kolejne wiersze posiadają wartości 0-16(0-czarny, 16-biały) - na ten podstawie poszczególne piksele “koloruje”.
Problem jednak w tym, że w dość losowym momencie program potrafi mi się zawiesić. Tzn. na liście procesów dalej go widzę, zajmuje dość sporo % mocy obliczeniowej, więc tak jakby “liczył” ale nie ma postępu - nie pojawiają się nowe obrazki, nie wyświetla mi się informacja, żeby przetworzył kolejny obrazek… do testów nawet ująłem tą czasochłonną pętlę blokiem timeout, i nie reaguje na nią…
Poniżej zamieszczam kod - jeśli ma ktoś jakiś pomysł, co może z nim być nie tak (lub ew. prośba o info, czy u Was działa normalnie).
Z góry dzięki za wszelką pomoc.
Aha, Od razu mówię, że to okrojona, wczesna koncepcja - mam bardziej zaawansowaną, rozdzielająca ten syf na wątki - ale niech najpierw zadziała taka możliwie prosta, cudować będę potem :wink:

[code=ruby]## main.rb
require ‘timeout’
require “Image.rb”

@img = Image.new
@start = Time.now
@threads = []
Timeout::timeout(100) do
File.new(“Digits_tra.txt”, “r”).each_with_index { |element, @index|
targets= element.split("\t")
targets.delete(targets[-1])
@img.draw(targets, @index)
}
end
@end = Time.now
@time = @end - @start
@avg_time = @time / (@index +1)
puts “±-----------------------------------------------+”
puts “| Czas startu: \t\t\t | #{@start.strftime(”%H:%M:%S")} \t | \n"
puts “| Czas zakonczenia: \t\t | #{@end.strftime(”%H:%M:%S")} \t | \n"
puts “| Przetworzonych obiektow: \t | #{@index+1} \t | \n”
puts “| Czas przetwarzania: \t\t | #{sprintf(’%.2f’ ,@time).to_f} \t | \n”
puts “±-----------------------------------------------+”

Image.rb

require ‘rubygems’
require ‘RMagick’

class Image
def initialize
@image_size = 128
@image = Magick::Image.new(@image_size, @image_size)
@size = @image_size / 8
end

def draw(data, num)
x = 0
y = 0
65.times do |i|
@data = Magick::Draw.new
color = 16 * data[i].to_i
@data.fill(“rgb(#{color},#{color},#{color})”)
@data.rectangle(x, y, x + @size, y + @size)
x += @size
x = 0 if (i % 8 == 0 && i != 0)
y += @size if (i % 8 == 0 && i != 0)
@data.draw(@image)
end
if File.exists?(“images/#{num}.png”)
raise “Probujesz nadpisac plik #{num} !”
end
@image.write(“images/#{num}.png”)
puts “Przetworzono obrazek #{num}”
end

end[/code]
Ponieważ macierz jest dość duża, wrzucą ją wklej.org
Aha, garść info o platformie testowej:

ruby -v ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-darwin10.4.0] gem list | grep rmag* rmagick (2.13.1) convert -version Version: ImageMagick 6.6.4-5 2010-11-09 Q16 http://www.imagemagick.org

convert przy takiej ilość chyba może być problemem, miał on swego czasu duże wycieki pamięci, w sumie nie wiem czy to poprawili. Może spróbuj jakąś inną bibliotekę.

a co możesz polecić? w zasadzie imagemagick zawsze był dla mnie standardem i nie wiem czego użyć w zamian (coś, co ma bindingi do rubego mnie interesuje :wink: )