如何在Celluloid中停止“终止任务”消息?

时间:2014-05-09 10:09:40

标签: ruby concurrency warnings worker celluloid

我有一个工作人员从网址读取并检索一些数据。所以我使用池来实现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]警告 - :终止   任务:type =:finalizer,meta = {:method_name =>: shutdown },   状态=:callwait

我的问题是如何暂停这些讯息?包装在一个开始......救援没有帮助。并且,为什么会出现警告,代码有什么问题?

谢谢!

2 个答案:

答案 0 :(得分:1)

需要添加:

# Use the logger of your Rails application.
Celluloid.logger = Rails.logger

答案 1 :(得分:0)

在程序退出前终止池的链接:

pool.links.each(&:terminate)