有没有办法让Resque平均分配给定的工作?

时间:2013-10-08 10:27:21

标签: ruby-on-rails redis background-process resque

我有5名Resque工作人员设置如下:

QUEUE=* rake environment resque:work
QUEUE=* rake environment resque:work
QUEUE=* rake environment resque:work

当我经营这么重的工作时:

100.times do 
Resque.enqueue(DoTheJob)
end

第一名工人获得约80份工作,其他工人分享其余工作......

就我而言,我可能有40个并发且非常繁重的工作 - 视频转码 - 。它们将被连续触发,我希望工作与我现有的工人平分或至少公平地分开(最多可以达到30人)。

是否有选项或类似的东西?

我怎样才能做到这一点?

谢谢

1 个答案:

答案 0 :(得分:0)

好吧,当我用最简单的Resque工作者类结构尝试上面的代码时,这样:

class MyWorker 
@queue=:test

def self.perform(data)

puts "Testing...."

end

end

100.times do 
Resque.enqueue(MyWorker)
end

所有作业都排队等同。

BUT。

当我向工人放几秒钟sleep时,我发现工作岗位非常公平。

class MyWorker @queue=:test

def self.perform(data)

puts "Testing...."
sleep 3
end

end

我不知道Resque的algorythm是什么用于此目的,但看起来没有问题。