2023-06-19 17:42:47 -04:00
|
|
|
// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
|
|
|
|
// SPDX-License-Identifier: Apache-2.0
|
2017-11-20 00:10:04 -05:00
|
|
|
|
2023-08-10 22:46:45 -04:00
|
|
|
package worker // import "miniflux.app/v2/internal/worker"
|
2017-11-20 00:10:04 -05:00
|
|
|
|
|
|
|
import (
|
2023-08-10 22:46:45 -04:00
|
|
|
"miniflux.app/v2/internal/model"
|
|
|
|
"miniflux.app/v2/internal/storage"
|
2017-11-20 00:10:04 -05:00
|
|
|
)
|
|
|
|
|
2018-11-11 18:32:48 -05:00
|
|
|
// Pool handles a pool of workers.
|
|
|
|
type Pool struct {
|
2017-11-20 00:10:04 -05:00
|
|
|
queue chan model.Job
|
|
|
|
}
|
|
|
|
|
2017-11-22 01:36:00 -05:00
|
|
|
// Push send a list of jobs to the queue.
|
2018-11-11 18:32:48 -05:00
|
|
|
func (p *Pool) Push(jobs model.JobList) {
|
2017-11-22 01:36:00 -05:00
|
|
|
for _, job := range jobs {
|
2018-11-11 18:32:48 -05:00
|
|
|
p.queue <- job
|
2017-11-22 01:36:00 -05:00
|
|
|
}
|
2017-11-20 00:10:04 -05:00
|
|
|
}
|
|
|
|
|
2018-11-11 18:32:48 -05:00
|
|
|
// NewPool creates a pool of background workers.
|
2021-01-02 19:33:41 -05:00
|
|
|
func NewPool(store *storage.Storage, nbWorkers int) *Pool {
|
2018-11-11 18:32:48 -05:00
|
|
|
workerPool := &Pool{
|
2017-11-20 00:10:04 -05:00
|
|
|
queue: make(chan model.Job),
|
|
|
|
}
|
|
|
|
|
|
|
|
for i := 0; i < nbWorkers; i++ {
|
2021-01-02 19:33:41 -05:00
|
|
|
worker := &Worker{id: i, store: store}
|
2017-11-20 00:10:04 -05:00
|
|
|
go worker.Run(workerPool.queue)
|
|
|
|
}
|
|
|
|
|
|
|
|
return workerPool
|
|
|
|
}
|