如何在Resque队列中随机播放作业?

问题描述 投票:5回答:4

我有一个名为check_integrity的队列,其中有很多工作。当我为它工作时,工作是先出先出。是否可以改组特定队列中的作业?我需要工人随机工作。请帮助。

谢谢。

ruby-on-rails ruby resque
4个回答
2
投票

解决此问题的一种方法是将条目从队列中弹出,对它们进行批处理,将批处理改组然后重新插入它们:]

key = "resque:queue:bulk"
total = Redis.current.llen(key)
batch_size = 5_000 # any value that is good enough for you

batch = []
total.times do |i|
  entry = Redis.current.lpop(key)
  batch << entry
  if batch.size == batch_size || i.succ == total
    puts "re-inserting batch..."
    Redis.current.rpush key, batch.shuffle
    batch = []
  end
end

当您错误地将多个作业排入队列而最终争夺共享资源,锁等时,这真的很有用。


1
投票

查看此plugin以获取Resque。我想这正是您所需要的。


0
投票

如果您不介意猴子打补丁,那么您可以使用此解决方案:


-3
投票

您可以使用Delayed_job

© www.soinside.com 2019 - 2024. All rights reserved.