2014-01-20 49 views
2

在Sinatra應用程序中,我需要每天在後臺運行一個作業(我可能會使用sidekiq)。根據對象數量均勻動態調度後臺作業

我想根據用戶數量在白天均勻分發它們。因此,例如,如果有12個用戶需要每兩個小時執行一次該作業,並且如果有240個用戶,則該作業必須每6分鐘執行一次。

我知道有一些寶石可以讓你安排後臺任務(Rufus scheduler,每當...),但我不確定他們是否允許更改內部任務必須根據動態值執行,例如集合中的對象數量。

任何想法如何實現這一目標?

+0

看一看這樣的:http://tysmith.me/post/20878111254/dynamictasks – usha

回答

0

使用whenever,你可以開始這樣的:

在用戶模式,用戶添加成功後:

every (1440/User.all.count).to_i.minutes do 
    add your background command task 
end 

也不要忘記更新每當店裏這實際上更新cron。

system 'bundle exec whenever --update-crontab store' 
+0

謝謝,但我不喜歡使用回調(不知道即使他們提供西納特拉)。我目前的想法(現在沒有時間來測試它)是每天都有一個調度程序工作來獲取用戶,並根據他們的編號調度使用sidekiq'''delay_for'''的實際後臺進程。 – macsig

+0

那麼您的日程安排將不夠精確,無法在24小時內平均分配。 – emaillenin

+0

毫秒內不必精確。如果有4個用戶,第一個工作在12:00.01,第二個在06:00.04,第三個在11:59:57,第四個在06:00:54,我可以。謝謝 – macsig