有没有办法可以同时从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
答案 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