Overview

March 28, 2022 ยท View on GitHub

Go GitHub go.mod Go version Go Report Card codecov License

Overview

AsyncJob is an asynchronous job manager with light code, clear and speed. I hope so ! ๐Ÿ˜ฌ

Features

  • AsyncJob is a simple asynchronous job manager.
  • Full code coverage
  • Async queue
  • Define the number of asynchronous tasks (default: runtime.NumCPU())
  • Handling of managed and unmanaged errors
  • Provide a simple ETA
  • Full code description

Usage

package main

import (
	"github.com/lab210-dev/async-job"
	"log"
)

func main() {
	// Create a new AsyncJob
	asj := asyncjob.New[string]()

	// Set the number of asynchronous tasks (default: runtime.NumCPU())
	asj.SetWorkers(2)

	// Listen to the progress status
	asj.OnProgress(func(progress asyncjob.Progress) {
            log.Printf("Progress: %s\n", progress.String())
	})

	// Run all jobs 
	err := asj.Run(func(job asyncjob.Job[string]) error {
            // receive the job in job data function
            // if err return or panic, the job will be marked as failed and all progress will be canceled
            return nil
	}, []string{"Hello", "World"})

	// if a job returns an error, it stops the process
	if err != nil {
            log.Fatal(err)
	}
}

๐Ÿ’ก For better performance

Using a modulo to reduce the eta display (fast example)

package main

import (
	"github.com/lab210-dev/async-job"
	"log"
	"time"
)

func main() {
	// create slice of jobs
	var list []time.Duration
	for i := 1; i <= 100; i++ {
		list = append(list, time.Duration(1)*time.Millisecond)
	}
	err := asyncjob.New[time.Duration]().
		SetWorkers(2).
		OnProgress(func(progress asyncjob.Progress) {
			// Eta will be displayed every 10 jobs
			if progress.Current()%10 != 0 {
				return
			}
			// print the eta
		    log.Printf("Progress: %s\n", progress.String())
		}).
		Run(func(job asyncjob.Job[time.Duration]) error {
			// slow down the job
			time.Sleep(job.Data())
			return nil
		}, list)
	
	// if a job returns an error, it stops the process
	if err != nil {
		log.Fatal(err)
	}
}

๐Ÿค Contributions

Contributors to the package are encouraged to help improve the code.