在ruby中实现线程

时间:2015-09-18 10:17:55

标签: ruby multithreading

我有多个来源,我从哪里导入文章列表。以下是实施。但是,改进可能是同时为相同的源运行线程。

class Importer
  def init

    t1 = Thread.new(get_Articles('url1',
                                 'RSS',
                                 nil))
    t2 = Thread.new(get_Articles('url2',
                                 'RSS',
                                 nil)
    t1.join
    t2.join

  end
  def get_Articles(source_url, source_type, source_key)

    articles = Article.new
    if source_type == 'RSS' then
      ... 
    elsif source_type == 'JSON' then
      ...    
  end
end

我已经实现了线程排序。但我不确定我是否正在按照Ruby的方式进行。有人可以就此提出建议吗?在上面运行时,我会在must be called with a block

上收到错误 - Thread.new(get_Articles('url1',

1 个答案:

答案 0 :(得分:4)

如果我们查看documentation for Thread,我们会看到应该使用块调用Thread.new。也就是说,使用花括号而不是圆括号:

t1 = Thread.new { get_Articles('url1', 'RSS', nil) }
t2 = Thread.new { get_Articles('url2', 'RSS', nil) }

您的原始代码甚至在调用get_Articles之前运行Thread.new,尝试传递返回值,这不是块。