2017-07-05 4 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でループにプールの作成を含めてみましたが、それは、スレッドをスパムと俳優のクラッシュにつながるです。 pool.sizeを設定

答えて

0

は、明示的にそれが

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 
思わトリックをしました