Я заинтересован в использовании Resque для распределения работы на множество разных компьютеров. Но у меня есть одна забота. Если мне нужно убить одного из рабочих, который работает над заданием, я хотел бы, чтобы он автоматически ставил это задание в очередь, чтобы гарантировать, что оно будет запущено другим рабочим. Я работал с Django Celery и просто нажимаю CTRL+C, который убивает рабочего, а также ставит задачу в очередь. Есть ли способ сделать это с Resque в Rails? Благодарю вас!
Повторная постановка заданий в очередь с помощью Resque
comment
Вы уверены, что Resque не будет повторно ставиться в очередь автоматически? Resque предполагает хаос, поэтому я не удивлюсь, если он просто сработает.
- person Paulo Casaretto   schedule 18.11.2011
comment
Я пробовал. Я управлял двумя рабочими с двумя разными работами. Я нажал CTRL-C на одном из воркеров, и когда я проверил Resque-web, оказалось, что он успешно обработал задание, а воркер, которого я не остановил, не взял на себя дополнительную работу. =/ Если бы я мог просто захватить этот CTRL-C и изящно завершить рабочий процесс и повторно поставить задание в очередь.
- person Silverbolt   schedule 19.11.2011
Ответы (1)
Я только что понял это. Я могу перехватить термин сигнала (CTRL-C) и заставить его либо повторно поставить задание в очередь, либо сказать, что задание завершается ошибкой, и выполнить повторную попытку повторно поставить задание в очередь позже.
Например:
def self.perform(args)
trap("INT") do
puts "Signal was caught!"
#either raise an error here if using a tool like resque-retry or requeue the job
end
#Do work here
end
Извините за глупый вопрос ;)
person
Silverbolt
schedule
22.11.2011