我有一个名为check_integrity的队列,其中有很多工作。当我为它工作时,工作是先出先出。是否可以改组特定队列中的作业?我需要工人随机工作。请帮助。
谢谢。
解决此问题的一种方法是将条目从队列中弹出,对它们进行批处理,将批处理改组然后重新插入它们:]
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
当您错误地将多个作业排入队列而最终争夺共享资源,锁等时,这真的很有用。
查看此plugin以获取Resque。我想这正是您所需要的。
如果您不介意猴子打补丁,那么您可以使用此解决方案:
您可以使用Delayed_job