GoTask

package module
v1.0.15 Latest Latest
Warning

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

Go to latest
Published: Nov 20, 2021 License: 0BSD Imports: 9 Imported by: 0

README

gotaskv1

go定时任务工具库

Api
// 创建一个定时任务对象
// @params: routineCount    执行任务的线程池大小
// @retuen: *TimedTask      创建的定时任务对象
func NewTimedTask(routineCount int) (*TimedTask)


// 添加定时任务
func (tt *TimedTask) Add(key string, task TaskObj, spec int)
// @params: key              任务键
// @params: task             任务方法
// @params: spec             任务定时时长


// 取消定时任务
func (tt *TimedTask) Cancel(key string)
// @params: key              任务键


// 获取定时任务列表信息
func (tt *TimedTask)GetTimedTaskInfo()map[string]*TaskInfo
// @retuen: map[string]*TaskInfo      定时任务列表

Struct
// 执行任务回调函数参数结构体
type ExecuteCbArgs struct {
	Key      string                         任务键key
	Task     TaskObj                        任务方法
	LastTime time.Time                      最后一次执行任务的时间(未执行过时为time.Time{})
	AddTime  time.Time                      任务添加的时间
	Count    int                            任务执行次数
	Spec     int                            任务执行时间间隔
	Res     map[string]interface{}          任务执行结果
	Error   error                           任务执行错误信息
}


// 添加任务回调函数参数结构体
type AddCbArgs struct {
	Key      string                         任务键key
	Task     TaskObj                        任务方法
	LastTime time.Time                      最后一次执行任务的时间(未执行过时为time.Time{})
	AddTime  time.Time                      任务添加的时间
	Count    int                            任务执行次数
	Spec     int                            任务执行时间间隔
	Error error                             添加任务操作错误(如果任务键已经存在时会出错)
}


// 取消任务回调函数参数结构体
type CancelCbArgs struct {
	key   string                            任务键key
	Error error                             取消任务操作错误(如果任务键本身不存在时会出错)
}


// 定时任务信息
type TaskInfo struct {
	Key      string                         任务键key
	Task     TaskObj                        任务方法
	LastTime time.Time                      最后一次执行任务的时间(未执行过时为time.Time{})
	AddTime  time.Time                      任务添加的时间
	Count    int                            任务执行次数
	Spec     int                            任务执行时间间隔
}


// 定时任务方法
type TaskObj func() (map[string]interface{}, error)


// 添加任务回调函数
type addCallback func(*AddCbArgs)


// 取消任务回调函数
type cancelCallback func(*CancelCbArgs)


// 执行任务回调函数
type executeCallback func(*ExecuteCbArgs)
Demo
	tt := NewTimedTask(10)

	// 添加添加任务回调
	tt.AddAddCallback(func(args *AddCbArgs) {
		if args.Error != nil {
			fmt.Println(fmt.Sprintf("add task: %s ,error msg: %s", args.Key, args.Error))
		} else {
			fmt.Println(fmt.Sprintf("add task: %s", args.Key))
		}
	})

	// 让C任务执行10次后取消
	tt.AddExecuteCallback(func(args *ExecuteCbArgs) {
		if args.Key == "C" && args.Count == 10 {
			tt.Cancel("C")
		}
	})

	// 添加取消任务回调
	tt.AddCancelCallback(func(args *CancelCbArgs) {
		if args.Error == nil {
			fmt.Println("cancel timed task: ", args.Key)
		} else {
			fmt.Println(fmt.Sprintf("cancel timed task:%s ,error msg: %s", args.Key, args.Error))
		}
	})

	// 添加任务A
	tt.Add("A", func() (map[string]interface{}, error) {
		fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "Execute Task `A`")
		return nil, nil
	}, 2)

	// 重复添加任务A
	tt.Add("A", func() (map[string]interface{}, error) {
		fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "Execute Task `A`")
		return nil, nil
	}, 2)

	// 添加任务B
	tt.Add("B", func() (map[string]interface{}, error) {
		fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "Execute Task `B`")
		return nil, nil
	}, 1)

	// 添加任务C
	tt.Add("C", func() (map[string]interface{}, error) {
		fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "Execute Task `C`")
		return nil, nil
	}, 3)

	// 打印时间
	fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "[Init]")

	// 6秒后取消A
	time.Sleep(time.Second * 6)
	tt.Cancel("A")

	// 6秒后取消B
	time.Sleep(time.Second * 10)
	tt.Cancel("B")

	time.Sleep(time.Hour)

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrTaskIsExist    = errors.New("task is exist")
	ErrTaskIsNotExist = errors.New("task is not exist")
	ErrTaskIsBan      = errors.New("task is ban")
	ErrTaskIsUnBan    = errors.New("task is already unban")
)

Functions

This section is empty.

Types

type AddCbArgs added in v1.0.13

type AddCbArgs struct {
	*TaskInfo
	Error error
}

type BanCbArgs added in v1.0.13

type BanCbArgs struct {
	Key   string
	Error error
}

type CancelCbArgs added in v1.0.13

type CancelCbArgs struct {
	Key   string
	Error error
}

type CbFuncMap

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

func NewCbFuncMap

func NewCbFuncMap() *CbFuncMap

func (*CbFuncMap) Add

func (fm *CbFuncMap) Add(i interface{})

func (*CbFuncMap) Del

func (fm *CbFuncMap) Del(i interface{})

func (*CbFuncMap) GetAll

func (fm *CbFuncMap) GetAll(out interface{}) int

type ExecuteCbArgs added in v1.0.13

type ExecuteCbArgs struct {
	*TaskInfo
	Res   map[string]interface{}
	Error error
	Gid   pool.GoroutineUID
}

type Func added in v1.0.13

type Func func(time int) (map[string]interface{}, error)

type ISchedule added in v1.0.13

type ISchedule interface {
	GetAddTime() time.Time                    // 获取添加时间
	AddExecuteCount()                         // 添加执行次数 任务执行完毕后调用
	GetExecuteCount() int                     // 获取执行次数
	Expression() (nt time.Time, isValid bool) // 表达式
	ToString() string
}

任务调度接口

type MultiTask

type MultiTask struct {
	*TimedTask
}

指定执行次数定时任务

func NewMultiTask

func NewMultiTask(routineCount int) *MultiTask

func (*MultiTask) Add

func (mt *MultiTask) Add(key string, task Func, spec int, count int)

type SingleTask

type SingleTask struct {
	*MultiTask
}

指定只执行一次定时任务

func NewSingleTask

func NewSingleTask(routineCount int) *SingleTask

func (*SingleTask) Add

func (st *SingleTask) Add(key string, task Func, spec int)

type SpecSchedule added in v1.0.13

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

指定时长循环调度

func NewSpecSchedule added in v1.0.13

func NewSpecSchedule(addTime time.Time, count int, spec time.Duration) *SpecSchedule

func (*SpecSchedule) AddExecuteCount added in v1.0.15

func (p *SpecSchedule) AddExecuteCount()

func (*SpecSchedule) Expression added in v1.0.13

func (p *SpecSchedule) Expression() (nt time.Time, isValid bool)

func (*SpecSchedule) GetAddTime added in v1.0.15

func (p *SpecSchedule) GetAddTime() time.Time

func (*SpecSchedule) GetExecuteCount added in v1.0.15

func (p *SpecSchedule) GetExecuteCount() int

func (*SpecSchedule) ToString added in v1.0.13

func (p *SpecSchedule) ToString() string

type SpecTimeSchedule added in v1.0.13

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

指定时长指定次数调度器

func NewSpecTimeSchedule added in v1.0.13

func NewSpecTimeSchedule(spec time.Duration, limit int) *SpecTimeSchedule

func (*SpecTimeSchedule) AddExecuteCount added in v1.0.15

func (p *SpecTimeSchedule) AddExecuteCount()

func (*SpecTimeSchedule) Expression added in v1.0.13

func (p *SpecTimeSchedule) Expression() (nt time.Time, isValid bool)

func (*SpecTimeSchedule) GetAddTime added in v1.0.15

func (p *SpecTimeSchedule) GetAddTime() time.Time

func (*SpecTimeSchedule) GetExecuteCount added in v1.0.15

func (p *SpecTimeSchedule) GetExecuteCount() int

func (*SpecTimeSchedule) ToString added in v1.0.13

func (p *SpecTimeSchedule) ToString() string

type TaskInfo added in v1.0.13

type TaskInfo struct {
	Key        string      // 任务标志key
	Task       Func        // 任务方法
	LastTime   time.Time   // 最后一次执行任务的时间(未执行过时为time.Time{})
	Sche       ISchedule   // 任务计划
	LastResult *TaskResult // 任务最后一次执行的结果
}

func NewTaskInfo added in v1.0.13

func NewTaskInfo(key string, task Func, sche ISchedule) *TaskInfo

创建一个任务信息对象

func (*TaskInfo) Clone added in v1.0.13

func (t *TaskInfo) Clone() *TaskInfo

生成副本

func (*TaskInfo) GetAddTaskTime added in v1.0.13

func (t *TaskInfo) GetAddTaskTime() time.Time

任务添加时间

func (*TaskInfo) GetExecuteCount added in v1.0.15

func (t *TaskInfo) GetExecuteCount() int

func (*TaskInfo) GetLastExecuteTime added in v1.0.13

func (t *TaskInfo) GetLastExecuteTime() (time.Time, bool)

最后一次执行时间

func (*TaskInfo) HasNextExecute added in v1.0.13

func (t *TaskInfo) HasNextExecute() bool

是否还有下一次执行

func (*TaskInfo) NextScheduleTime added in v1.0.13

func (t *TaskInfo) NextScheduleTime() time.Time

下次执行时间

func (*TaskInfo) Update added in v1.0.13

func (t *TaskInfo) Update()

执行后调用 调整任务信息 返回是否还有下一次执行

type TaskMap added in v1.0.15

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

任务字典 线程安全

func NewTaskMap added in v1.0.13

func NewTaskMap() *TaskMap

func (*TaskMap) Add added in v1.0.15

func (tm *TaskMap) Add(key string, task *TaskInfo)

添加

func (*TaskMap) AddOrSet added in v1.0.15

func (tm *TaskMap) AddOrSet(key string, task *TaskInfo)

添加或修改

func (*TaskMap) Delete added in v1.0.15

func (tm *TaskMap) Delete(key string)

删除

func (*TaskMap) Get added in v1.0.15

func (tm *TaskMap) Get(key string) *TaskInfo

获取 返回副本

func (*TaskMap) GetAll added in v1.0.15

func (tm *TaskMap) GetAll() map[string]*TaskInfo

获取所有返回副本

func (*TaskMap) IsExist added in v1.0.15

func (tm *TaskMap) IsExist(key string) bool

键是否存在

func (*TaskMap) SelectNextExec added in v1.0.15

func (tm *TaskMap) SelectNextExec() (*TaskInfo, time.Duration, bool)

选择下一个最早执行的任务

func (*TaskMap) Set added in v1.0.15

func (tm *TaskMap) Set(key string, task *TaskInfo)

存在时才修改

type TaskResult added in v1.0.15

type TaskResult struct {
	Result map[string]interface{}
	Err    error
}

func (*TaskResult) Clone added in v1.0.15

func (tr *TaskResult) Clone() *TaskResult

type TimedTask

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

func NewTimedTask

func NewTimedTask(maxRoutineCount int) *TimedTask

func (*TimedTask) Add

func (tt *TimedTask) Add(key string, obj Func, sche ISchedule)

func (*TimedTask) AddAddCallback

func (tt *TimedTask) AddAddCallback(cb func(*AddCbArgs))

func (*TimedTask) AddBanCallback

func (tt *TimedTask) AddBanCallback(cb func(*BanCbArgs))

func (*TimedTask) AddCancelCallback

func (tt *TimedTask) AddCancelCallback(cb func(*CancelCbArgs))

func (*TimedTask) AddExecuteCallback

func (tt *TimedTask) AddExecuteCallback(cb func(*ExecuteCbArgs))

func (*TimedTask) AddUnBanCallback

func (tt *TimedTask) AddUnBanCallback(cb func(*UnBanCbArgs))

func (*TimedTask) Ban

func (tt *TimedTask) Ban(key string)

func (*TimedTask) Cancel

func (tt *TimedTask) Cancel(key string)

func (*TimedTask) DelAddCallback

func (tt *TimedTask) DelAddCallback(cb func(*AddCbArgs))

func (*TimedTask) DelBanCallback

func (tt *TimedTask) DelBanCallback(cb func(*BanCbArgs))

func (*TimedTask) DelCancelCallback

func (tt *TimedTask) DelCancelCallback(cb func(*CancelCbArgs))

func (*TimedTask) DelExecuteCallback

func (tt *TimedTask) DelExecuteCallback(cb func(*ExecuteCbArgs))

func (*TimedTask) DelUnBanCallback

func (tt *TimedTask) DelUnBanCallback(cb func(*UnBanCbArgs))

func (*TimedTask) Execute

func (tt *TimedTask) Execute(key string)

主动执行一次指定key任务 不影响既有定时任务 执行的记录将会添加到任务总结信息中

func (*TimedTask) GetTimedTaskInfo

func (tt *TimedTask) GetTimedTaskInfo() map[string]*TaskInfo

获取定时任务列表信息

func (*TimedTask) IsBan

func (tt *TimedTask) IsBan(key string) bool

func (*TimedTask) Set

func (tt *TimedTask) Set(key string, obj Func, sche ISchedule)

func (*TimedTask) Stop

func (tt *TimedTask) Stop()

func (*TimedTask) UnBan

func (tt *TimedTask) UnBan(key string)

type TimerObj added in v1.0.13

type TimerObj func() (spec time.Duration, start, end time.Time)

func Timer added in v1.0.13

func Timer() TimerObj

计时器

type UnBanCbArgs added in v1.0.13

type UnBanCbArgs BanCbArgs

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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