func (sched *Sched) pushJobPQ(job driver.Job) bool { defer sched.PQLocker.Unlock() sched.PQLocker.Lock() if job.IsReady() { item := &queue.Item{ Value: job.ID, Priority: job.SchedAt, } if sched.cacheItem != nil && item.Priority < sched.cacheItem.Priority { if job.ID == sched.cacheItem.Value { return true } job, _ = sched.driver.Get(sched.cacheItem.Value) sched.cacheItem = item if job.ID <= 0 || !job.IsReady() { return false } } pq, ok := sched.jobPQ[job.Func] if !ok { pq1 := make(queue.PriorityQueue, 0) pq = &pq1 sched.jobPQ[job.Func] = pq heap.Init(pq) } heap.Push(pq, item) return true } return false }