gpt4 book ai didi

ruby - Celluloid Pool 有死 Actor 第一次叫

转载 作者:太空宇宙 更新时间:2023-11-03 16:25:23 26 4
gpt4 key购买 nike

每次我启动该应用程序时,我第一次调用它时,它都会返回 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

然后我从我的 Controller 调用它 BatchProcess.new.fetch(array_of_sites_to_parse)

我确实尝试将 @pool = BatchProcess.pool 放入我的初始化程序中,它没有出错,但 actor 随每个请求呈指数级增长。

最佳答案

这是因为在定义 initialize 之前,您将 Pool 实例化为 class 常量。在设置 POOL 常量时,initialize 尚不存在,因此您的实例变量均未初始化。

第二次尝试时,将定义initialize

关于ruby - Celluloid Pool 有死 Actor 第一次叫,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25834139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com