Cálculos simultâneos em Ruby, com celulóide

Recentemente, precisávamos de uma maneira de acelerar um processo para calcular o crescimento percentual por vários períodos (por exemplo, todas as semanas do ano). Celluloid – a biblioteca de atores Ruby – e seu futuro tornam isso fácil

(7..365).step(7).each do |d|
start_date
= d.days.ago
end_date
= (d - 7).days.ago

calc
= GrowthCalculator.new(start_date, end_date)

#kick off the calculation and continue execution
growth
= calc.future.percent_growth

results
<< { name: "Growth %", percent: growth }
end

# "realize" the value of the future
results
.each {|r| r[:percent] = r[:percent].value}