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但它是垃圾邮件线程并导致演员崩溃。

4

1 回答 1

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
于 2017-07-05T20:20:35.843 回答