从线程循环中分离出来

时间:2014-08-30 13:25:40

标签: ruby multithreading threadpool

我正在从(降序)时间订购的图库中下载图像。我想停下来,当我们看到已经下来的照片时。

require 'thread/pool'

def getimg(uri)
#...
  if File.exist? filename
    raise "Already done."  # something like this
  end
#...
end

pool = Thread.pool(4)

thumbs.each do |a|
  pool.process {
    getimg(URI(a.attr('href')))
  }
end

1 个答案:

答案 0 :(得分:2)

如何传递池对象并使用pool.shutdown

require 'thread/pool'

def getimg(uri, pool) # <----
#...
  if File.exist? filename
    pool.shutdown  # <--------
    return         # <------
  end
#...
end

pool = Thread.pool(4)

thumbs.each do |a|
  pool.process {
    getimg(URI(a.attr('href')), pool) # <----
  }
end

根据the Thread::Pool#process code comment

  

关闭池,它将阻塞,直到所有任务都完成运行。

<强>更新

使用shutdown!代替shutdown

  

关闭!立即关闭游泳池而不执行任务。