Help us shape the future of Go! Take the 2026 Go Developer Survey

worker

package
v1.64.2 Latest Latest
Warning

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

Go to latest
Published: Jan 12, 2026 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