每次我启动应用程序时,我第一次调用它时,它都会返回 Dead Actors。之后,它按预期返回。
require 'celluloid'
class BatchProcess
include Celluloid
POOL = BatchProcess.pool(size: 6)
attr_accessor :base_url, :futures, :objects, :pool, :array
def initialize(*args)
options = args.extract_options!
@base_url = options[:base_url] || "http://some_site.com"
@futures = []
@objects = {}
end
def fetch(array)
@pool = POOL
@array = array
start
end
def start
@grouped_sites = @array.group_by{|i| i[:main_site]}
@grouped_sites.each do |main_site, queries|
batched_url(main_site, queries)
end
futures.each {|f| @objects.merge!(f.value) if f.value}
end
def batched_urls(main_site, queries)
queries.each do |query|
futures << pool.future(:get_url, main_site, query)
end
end
def get_url(main_site, query)
# get http url and parse information process into json data
end
end
然后我从我的控制器调用它BatchProcess.new.fetch(array_of_sites_to_parse)
我确实尝试将它放入@pool = BatchProcess.pool
我的初始化程序中,它没有出错,但是每个请求都会成倍增长。