Ruby 从beanstalkd队列保留多个作业

Ruby 从beanstalkd队列保留多个作业,ruby,beanstalkd,Ruby,Beanstalkd,有没有一种方法可以同时从beanstalkd队列中保留多个作业 我向一个外部API发出请求,每个查询最多可以返回10个结果。它们限制了我每天可以提出的请求数量,因此每次请求得到的结果越多越好 我在文档中找不到任何关于此功能的提及,因此我使用此解决方法。有人知道实现这一目标的更好方法吗?或者是比豆茎更适合这份工作的工具 loop do sleep(0.3) while @beanstalk.tubes[example].peek(:ready) jobs = [] ca

有没有一种方法可以同时从beanstalkd队列中保留多个作业

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

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

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
loop do
睡眠(0.3)
而@beanstalk.tubes[示例].peek(:ready)
工作=[]
接住
10.3倍于我|
如果@beanstalk.tubes[example].peek(:ready),则
job=@beanstalk.tubes[示例].reserve(0)

作业通过调用
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
loop do
超时=零
工作=[]
开始
10.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
loop do
超时=零
工作=[]
开始
10.3倍于我|

我以前在PHP中做过类似的工作。将
reserve()
的结果存储在一个数组中,对所有结果进行批量处理,然后删除作业(或者仅删除成功的作业)。KR当然是beanstalkd方面最真实的专家。嘿,我刚刚编辑了这个答案,删除了繁忙的等待循环,并用第一个作业的无限超时来代替它。对不起,我第一次错过了。这个版本将更快地处理作业,避免浪费工人CPU。我以前在PHP中也做过类似的工作。将
reserve()
的结果存储在一个数组中,对所有结果进行批量处理,然后删除作业(或者仅删除成功的作业)。KR当然是beanstalkd方面最真实的专家。嘿,我刚刚编辑了这个答案,删除了繁忙的等待循环,并用第一个作业的无限超时来代替它。对不起,我第一次错过了。此版本将更快地处理作业,并避免浪费工人CPU。