2017-11-20 00:10:04 -05:00
|
|
|
// Copyright 2017 Frédéric Guillot. All rights reserved.
|
|
|
|
// Use of this source code is governed by the Apache 2.0
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package scheduler
|
|
|
|
|
|
|
|
import (
|
2017-12-13 00:48:13 -05:00
|
|
|
"github.com/miniflux/miniflux/model"
|
|
|
|
"github.com/miniflux/miniflux/reader/feed"
|
2017-11-20 00:10:04 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
// WorkerPool handle a pool of workers.
|
|
|
|
type WorkerPool struct {
|
|
|
|
queue chan model.Job
|
|
|
|
}
|
|
|
|
|
2017-11-22 01:36:00 -05:00
|
|
|
// Push send a list of jobs to the queue.
|
|
|
|
func (w *WorkerPool) Push(jobs model.JobList) {
|
|
|
|
for _, job := range jobs {
|
|
|
|
w.queue <- job
|
|
|
|
}
|
2017-11-20 00:10:04 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
// NewWorkerPool creates a pool of background workers.
|
|
|
|
func NewWorkerPool(feedHandler *feed.Handler, nbWorkers int) *WorkerPool {
|
|
|
|
workerPool := &WorkerPool{
|
|
|
|
queue: make(chan model.Job),
|
|
|
|
}
|
|
|
|
|
|
|
|
for i := 0; i < nbWorkers; i++ {
|
|
|
|
worker := &Worker{id: i, feedHandler: feedHandler}
|
|
|
|
go worker.Run(workerPool.queue)
|
|
|
|
}
|
|
|
|
|
|
|
|
return workerPool
|
|
|
|
}
|