2013-03-04 286 views
0

我有一個resque工作類,負責生成用戶活動報告。該類查詢數據庫,然後執行大量的計算/數據解析來向某些人發送電子郵件。我的問題是,應該像這樣的resque作業,有許多方法(200行左右的代碼),填充所有類方法並響應單個ResqueClass.perform方法?或者,我是否應該實例化這個resque類的新實例來表示正在生成的單個報表?如果兩種方法都能正確計算數據並通過電子郵件發送,那麼對於如何處理後臺作業,是否有一個慣例或最佳做法?Ruby on Rails,Resque

謝謝你

回答

1

兩種策略都是有效的。我通常從併發的角度來看待這個問題。當你的工作正在運行時,爲你的工作提供服務的resque worker很忙,所以如果你有N個worker和N個這些工作正在運行,那麼你必須等到一個完成之後才能處理隊列中的其他任務。

也許沒關係 - 如果你一次只有一份報告,那麼你實際上會專門委派一名工作人員來運行報告,你的其他人可以做其他事情。但是,如果你有一堆這些,這需要一段時間,你可能會影響隊列中的其他工作。

缺點是,如果您的報告死亡,您可能需要邏輯來提取您離開的位置。如果您爲每個用戶實例化一次報告,則只需重試失敗的作業 - 不需要「我在哪裏」邏輯。

+0

謝謝,非常有幫助 – BC00 2013-03-04 22:12:06