例如,如果我希望在一小时内完成一项工作并执行MyWorker.perform_in 1.hour',但队列中有这么多,即使在一小时内队列仍然存在如果我想在一小时内完成的工作会在所需的时间执行,还是会在队列结束时排队?
答案 0 :(得分:1)
Poller每隔N秒检查Redis,以便重试或预定集中的作业已超过其时间戳并应排队。如果是这样,它只会将作业弹回原始队列,这样工作人员就可以像其他任何工作那样接受它。
func saveLoginData(accessToken: String, userName: String) {
var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
var context: NSManagedObjectContext = appDel.managedObjectContext!
var fetchRequest = NSFetchRequest(entityName: "LoginData")
fetchRequest.predicate = NSPredicate(format: "userName = %@", userName)
if let fetchResults = appDel.managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [NSManagedObject] {
if fetchResults.count != 0{
var managedObject = fetchResults[0]
managedObject.setValue(accessToken, forKey: "accessToken")
context.save(nil)
}
}
}
调度程序似乎在预定时间将队列作业,而不是强迫工作人员在那时开始执行作业。
一种可能的解决方案是为计划作业提供自定义队列,为未计划作业提供一个自定义队列。这样,如果预定作业队列已满,则另一个队列仍可处理作业。有关队列的更多信息可在Sidekiq wiki中找到,其中更详细地介绍了此类设置。