2017-07-05 100 views
0

我有以下程序结构。赛璐珞调整大小池

client = Client.new 
params = client.get_params 
pool = client.pool(size: params.size) 

futures = params.map do |p| 
    pool.future(:perform_work, p) 
end 

futures.map(&:value) 

客户端是启用赛璐珞的类,使用include Celluloid。这很有效,直到我尝试在循环中执行程序。我需要根据从外部数据馈送收到的参数数量动态调整工作人员的大小。

client = Client.new 
pool = client.pool(size: 1) 

loop do 
    params = client.get_params 

    .... 
    **? pool.resize(size: params.size) ?** 
    .... 

    futures = params.map do |p| 
     pool.future(:perform_work, p) 
    end 

    futures.map(&:value) 
    sleep 1 
end 

我想包括池创建与后续pool.terminate的循环,但它的垃圾邮件线程,并导致演员崩溃。

回答

0

设置pool.size明确的伎俩似乎

client = Client.new 
pool = client.pool(size: 1) 

loop do 
    params = client.get_params 
    pool.size = params.size 

    futures = params.map do |p| 
     pool.future(:perform_work, p) 
    end 

    futures.map(&:value) 
    sleep 1 
end