我有兩個Sidekiq工作。第一個以JSON加載文章提要,並將其分成多個作業。它還創建日誌並存儲start_time
。Sidekiq:查找最後一份工作
class LoadFeed
include Sidekiq::Worker
def perform url
log = Log.create! start_time: Time.now, url: url
articles = load_feed(url) # this one loads the feed
articles.each do |article|
ProcessArticle.perform_async(article, log.id)
end
end
end
第二作業處理的文章,更新前創建的日誌的end_time
場找出來,多久的全過程(裝載飼料,它分成工作,處理文章)了。
class ProcessArticle
include Sidekiq::Worker
def perform data, log_id
process(data)
Log.find(log_id).update_attribute(:end_time, Time.now)
end
end
但現在我有一些問題/問題:
Log.find(log_id).update_attribute(:end_time, Time.now)
不是原子的,而且由於工作的異步行爲,這可能導致不正確的end_time
值。有沒有辦法在當前時間對MySQL中的datetime
字段進行原子更新?- 飼料可以得到相當長的時間(約800k條款)和更新值800k次,當你只需要最後一個似乎是很多不必要的工作。 任何想法如何找出哪一個是最後一項工作,並只更新
end_time
這個工作領域?
這將是一個有用的功能,但我買不起Sidekiq Pro的開源項目;) – 23tux