worker

package
v1.58.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 24, 2025 License: MIT Imports: 3 Imported by: 0

README

Package worker

Пакет worker предоставляет настраиваемый воркер для периодического запуска задач с контролем параллелизма и возможностью корректного завершения.

Types

Job

Интерфейс задачи, которую выполняет воркер.

Methods:

Do(ctx context.Context)

Выполнить задачу.

Worker

Структура воркера, выполняющего задачу с заданным интервалом и уровнем параллелизма.

Fields:

interval time.Duration

Интервал между запусками задачи (по умолчанию 1 секунда).

concurrency int

Количество параллельных воркеров (по умолчанию 1).

Methods:

New(job Job, opts ...Option) *Worker

Создаёт воркера с опциями и задачей для выполнения.

Run(ctx context.Context)

Запускает воркер(ы). Операция неблокирующая.

Shutdown()

Останавливает все воркеры и ожидает их завершения.

Опции для конфигурации воркера:

WithInterval(interval time.Duration) Option

Установить интервал между запусками.

WithConcurrency(concurrency int) Option

Установить количество параллельных воркеров.

Usage

package main

import (
	"context"
	"fmt"
	"time"

	"github.com/txix-open/worker"
)

// Пример задачи
type PrintJob struct{}

func (p PrintJob) Do(ctx context.Context) {
	fmt.Println("Job executed at", time.Now())
}

func main() {
	job := PrintJob{}

	// Создаём воркер с интервалом 2 секунды и 3 параллельными воркерами
	w := worker.New(job,
		worker.WithInterval(2*time.Second),
		worker.WithConcurrency(3),
	)

	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()

	// Запускаем воркер
	w.Run(ctx)

	// Работаем 7 секунд
	time.Sleep(7 * time.Second)

	// Останавливаем воркеры и ждём завершения
	w.Shutdown()

	fmt.Println("Worker shutdown complete")
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Job

type Job interface {
	Do(ctx context.Context)
}

type Option

type Option func(w *Worker)

func WithConcurrency

func WithConcurrency(concurrency int) Option

func WithInterval

func WithInterval(interval time.Duration) Option

type Worker

type Worker struct {
	// contains filtered or unexported fields
}

func New

func New(job Job, opts ...Option) *Worker

func (*Worker) Run

func (w *Worker) Run(ctx context.Context)

func (*Worker) Shutdown

func (w *Worker) Shutdown()

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL