2013-03-04 1 views
0

У меня есть класс вакансий, который отвечает за подготовку отчета о деятельности пользователя. Класс запрашивает базу данных, а затем выполняет многочисленные вычисления/синтаксический анализ данных для отправки электронной почты определенным людям. Мой вопрос заключается в том, что нужно повторно выполнять такие задания, которые имеют множество методов (200 строк или около того кода), заполняются всеми методами класса и отвечают на единственный метод ResqueClass.perform? Или, должен ли я создавать экземпляр этого класса resque для представления отдельного отчета, который создается? Если оба метода правильно вычисляют данные и отправляют их по электронной почте, существует ли конвенция или наилучшая практика о том, как ее следует обрабатывать для фоновых заданий?Ruby on Rails, Resque

Thank You

ответ

1

Обе стратегии действительны. Я обычно подхожу к этому с точки зрения параллелизма. Пока ваша работа запущена, рабочий службы resque, обслуживающий вашу работу, занят, поэтому, если у вас есть N рабочих и N этих заданий, вам придется подождать, пока это не будет выполнено, прежде чем что-либо еще в очереди будет обработано.

Возможно, это нормально - если у вас есть только один отчет за раз, то вы фактически будете посвящать одного рабочего для запуска отчета, другие могут делать другие вещи. Но если у вас есть куча, и это займет некоторое время, вы можете повлиять на другие задания в своей очереди.

Недостатком является то, что если ваш отчет умирает, вам может понадобиться логика, чтобы забрать, где вы остановились. Если вы создаете экземпляр отчета один раз для пользователя, вам просто нужно повторить неудавшиеся задания - не требуется логика «где была я».

+0

спасибо, очень полезно – BC00