runner

package
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Mar 24, 2021 License: MIT Imports: 7 Imported by: 0

README

runner

runner 用于构建长久运行的 goroutine 对象, 并提供 Start, Stop, Keepalive 等功能.

Usage

package main

import (
	"fmt"
	"os"
	"time"

	"github.com/KanShiori/kit/runner"
)

type Demo struct {
	*runner.Runner
}

func NewDemo() *Demo {
	d := &Demo{}

	d.Runner = runner.NewRunner(d, "Demo", time.Second)
	return d
}

func (d *Demo) Handle() {
	fmt.Println("is in handle")
}

func (d *Demo) OnStart() error {
	return nil
}

func (d *Demo) OnExit() {
}

func main() {
	d := NewDemo()

	// - start runner
	err := d.Start()
	if err != nil {
		fmt.Fprintf(os.Stderr, err.Error())
		os.Exit(1)
	}

	// - handling ...
	time.Sleep(10 * time.Second)

	// - stop runner
	d.Stop()
}

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrIsRunning = errors.New("runner is running")

	// RunningRunners 记录所有运行中的 Runner, name : *Runner
	RunningRunners sync.Map = sync.Map{}
)

Functions

func CheckaliveForever

func CheckaliveForever(interval time.Duration, handleTimeout func(name string, runner *Runner, curTime time.Time))

CheckaliveForever 用于周期性对所有 runner keepalive

Types

type Handler

type Handler interface {
	// Handle 为 Runner 中循环执行的函数
	Handle()

	// OnStart 在 Runner 启动前回调
	OnStart() error

	// OnExit 在 Runner 退出前回调
	OnExit()
}

type IRunner

type IRunner interface {
	// Start 启动 Runner
	Start() error

	// Stop 停止 Runner
	Stop()

	// KeepAlive 显式进行一次 keepalive
	KeepAlive()

	// IsTimeout 用于检查是否超时
	IsTimeout(curTime time.Time) bool

	// Name 返回 Runner 命名
	Name() string
}

IRunner 包含 Runner 提供给外部的接口, 用于接口的继承

type NoopHandler

type NoopHandler struct {
}

func (*NoopHandler) Handle

func (h *NoopHandler) Handle()

func (*NoopHandler) OnExit

func (h *NoopHandler) OnExit()

func (*NoopHandler) OnStart

func (h *NoopHandler) OnStart() error

type Runner

type Runner struct {
	Timeout  time.Duration
	Interval time.Duration
	Logger   io.Writer
	// contains filtered or unexported fields
}

Runner 是封装了永久循环的 goroutine 对象

func NewRunner

func NewRunner(handler Handler, name string, interval time.Duration) *Runner

func (*Runner) IsTimeout

func (r *Runner) IsTimeout(curTime time.Time) bool

IsTimeout 用于检查 Runner 是否阻塞

func (*Runner) KeepAlive

func (r *Runner) KeepAlive()

KeepAlive 刷新 LastHandleTime. 默认会在每次 handle 执行后执行

func (*Runner) LastHandleTime

func (r *Runner) LastHandleTime() time.Time

LastHandleTime 返回上一次 handle 执行结束的时间

func (*Runner) Name

func (r *Runner) Name() string

func (*Runner) Start

func (r *Runner) Start() error

Start 开始进行永久循环执行 handle 方法

func (*Runner) Stop

func (r *Runner) Stop()

Stop 调用 OnExit 回调, 停止并等待 runner 的退出

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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