code: func processBots(c context.Context, descriptors []model.PoolDescriptor) error {
  	return parallel.WorkPool(8, func(ch chan<- func() error) {
  		for _, desc := range descriptors {
  			desc := desc
  			ch <- func() error {
  				return processBot(c, desc)
  			}
  		}
  	})
  }
docs: // fetchBotPools resolves the descriptors into actual BotPool information.
  // The input is a list of descriptors to fetch from swarming.
  // Basically this just runs processBot() a bunch of times.