私が持っている各タスクは、短いバーストで作業し、次に約1時間スリープしてから、仕事が完了するまで再び作業します. 一部のジョブは完了までに約 10 時間かかる場合があり、それについては何もできません。
私を悩ませているのは、ジョブが眠っている間、resque ワーカーがビジーになることです。そのため、4 つのワーカーと 5 つのジョブがある場合、最後のジョブは処理されるまで 10 時間待たなければなりません。労働者は寝ています。現在のジョブがスリープしている間に resque worker が他のジョブを処理するようにする方法はありますか?
現在、私はこれに似たワーカーを持っています:
class ImportSongs
def self.perform(api_token, songs)
api = API.new api_token
songs.each_with_index do |song, i|
# make current worker proceed with another job while it's sleeping
sleep 60*60 if i != 0 && i % 100 == 0
api.import_song song
end
end
end