从beanstalkd队列中保留多个作业

时间:2013-01-15 02:17:56

标签: ruby beanstalkd

有没有办法可以同时从beanstalkd队列中保留多个作业?

我正在向外部API发出请求,每个查询最多可返回10个结果。它们限制了我每天可以提出的请求数量,因此每次请求获得的结果越多越好。

我在文档中找不到任何关于此功能的提及,因此我正在使用此解决方法。有谁知道更好的方法来实现这一目标?或者比beanstalkd更合适的工作工具呢?

loop do
  sleep(0.3)

  while @beanstalk.tubes[example].peek(:ready)
    jobs = []

    catch(:done) do
      10.times do |i|
        if @beanstalk.tubes[example].peek(:ready) then
          job = @beanstalk.tubes[example].reserve(0)
          jobs << job.body
          job.delete
        else
          throw(:done)
        end
      end
    end

    process(jobs)

  end
end

1 个答案:

答案 0 :(得分:3)

您可以通过致电reserve同时预订多个工作 在删除或释放这些工作之前连续几次。

根据您提供的代码示例,它可能看起来像什么 大致是这样的:

loop do
  timeout = nil
  jobs = []

  begin
    10.times do |i|
      jobs << @beanstalk.tubes[example].reserve(timeout)
      timeout = 0
    end
  rescue Beaneater::TimedOutError
    # nothing to do
  end

  process(jobs.map{|j| j.body})

  jobs.map do |job|
    job.delete
  end
end