2016-03-29 18 views
1
require 'celluloid/current' 

Celluloid.shutdown_timeout = 1 

class Mapper 
    include Celluloid 

    attr_accessor :value 

    def run(num) 
     @value = num.times.map { |idx| idx } 
    end 

end 

y = Mapper.spawn 
y.future.run(1000000) 

を使用している間Celluloid.shutdown_timeout持つすべての俳優を終了するどのように動作するようだと役者は1秒後にシャットダウンされている今まで。セルロイド俳優 - 先物

y.value 

しかし、メソッド呼び出しから返された値が利用可能になるまで、私は上記のような値にアクセスしようとした瞬間、それは続きます。

私の考えは、(1)がTimeout.timeout [ちょうど標準Timeout.timeout(1){}

ようCelluloid.shutdown_timeoutを使用して、1秒の時間制限を超えた場合、ブロックを終了するましたそれを使用していないと悪名高い]

セルロイドアクターを使ってこれを達成する正しい方法はありますか?

答えて

0

いいえ、それはどのようにshutdown_timeoutが動作していません。

Celluloid.shutdown_timeoutat_exitは、基本プロセスが終了しているときにシャットダウンするために使用されます。プロセスがkillシグナルを受け取ったときに使用されます。

ブロックはTimeout.timeout {}ブロックに入れる必要がありますが、正しくありますが、それらは正しく動作しません。