1

URLから読み取り、データを取得するワーカーがあります。したがって、プールを使用して、10 個の同時ワーカーの同時実行を実現しています。

require 'nokogiri'
require 'open-uri'
require 'celluloid/autostart'

 class WebWorker
    include Celluloid
    def get_data
      url = "http://example.com/"
      doc = Nokogiri::HTML( open( url ), nil, "UTF-8" )
      { data: doc.css("body h1")[0].content.strip }
    end
  end

pool = WebWorker.pool(:size => 10)
10.times do |t|
   futures = 10.times.map{ |t| pool.future(:get_data) }
   results = futures.map(&:value)
end

上記のコードを some_name.rb という名前のファイルに配置して実行すると、次のようになります。

D, [2014-05-09T10:15:06.061071 #6588] DEBUG -- : 15 人のアクターを終了中... W, [2014-05-09T10:15:06.063755 #6588] WARN -- : 終了タスク: type=:ファイナライザー、meta={:メソッド名=>:シャットダウン}、ステータス=:callwait

私の質問は、これらのメッセージを一時停止するにはどうすればよいですか? begin..rescue でラップしても役に立ちません。また、警告が表示されるのはなぜですか。コードに何か問題がありますか?

ありがとう!

4

2 に答える 2

1

追加する必要があります:

# Use the logger of your Rails application.
Celluloid.logger = Rails.logger
于 2014-05-18T06:21:14.627 に答える
0

プログラムを終了する前にプールのリンクを終了します。

pool.links.each(&:terminate)
于 2015-05-13T09:05:29.863 に答える