为了理解赛璐珞,我编写了以下脚本。
require 'celluloid/current'
class Processor
include Celluloid
def perfom(number)
puts "#{number} ... (#{Thread.current}) ..."
sleep(number%3)
puts "Launch finish!"
return number
end
end
pool = Processor.pool(size: 3)
futures = (1..7).map do |i|
pool.future(:perfom, i)
end
puts futures.map(&:value)
pool.terminate
一切正常,我想避免调用池上的终止。
所以我尝试使用主管,但它提高了我uninitialized constant Celluloid::SupervisionGroup
搜索后我发现这个(在弃用的文件夹中):(https://github.com/celluloid/celluloid-supervision/blob/master/spec/celluloid/deprecate/supervision/supervision_group_spec.rb)
我想让工作像这样:
supervisor = Celluloid::SupervisionGroup.run!
pool = supervisor.pool(Processor, size: 3, as: :worker)
futures = (1..7).map do |i|
pool[:worker].future(:perfom, i)
end
puts futures.map(&:value)
如何使用新系统让工作成为未来、主管和池?