code: func (pq *PriorityQueue) Run(ctx context.Context, f func(interface{})) {
  	top := len(pq.Queues) - 1
  	p := top
  READ:
  	for {
  		q := pq.Queues[p]
  		select {
  		case <-ctx.Done():
  			return
  		case x := <-q:
  			val := x.(struct {
  				v interface{}
  				t time.Time
  			})
  			f(val.v)
  			metrics.GetOrRegisterResettingTimer("pq.run", nil).UpdateSince(val.t)
  			p = top
  		default:
  			if p > 0 {
  				p--
  				continue READ
  			}
  			p = top
  			select {
  			case <-ctx.Done():
  				return
  			case <-pq.wakeup:
  			}
  		}
  	}
  }
docs: // Run is a forever loop popping items from the queues