Documentation
¶
Index ¶
- func LoadTaskFile[T comparable](path string) ([]T, error)
- type ReturnableTaskPool
- func NewNoDelayReturnableTaskPool[T, R comparable](concurrent int, taskList []T, ...) *ReturnableTaskPool[T, R]
- func NewReturnableTaskPool[T, R comparable](concurrent int, createInterval, executeDelay time.Duration, taskList []T, ...) *ReturnableTaskPool[T, R]
- func NewSimpleReturnableTaskPool[T, R comparable](concurrent int, taskList []T, ...) *ReturnableTaskPool[T, R]
- func (pool *ReturnableTaskPool) DisableTaskAutoSave()
- func (pool *ReturnableTaskPool) EnableTaskAutoSave(file string, interval time.Duration)
- func (pool *ReturnableTaskPool) GetAllTaskList() []T
- func (pool *ReturnableTaskPool) GetQueuedTaskList() []T
- func (pool *ReturnableTaskPool) GetRunningTaskList() []T
- func (pool *ReturnableTaskPool) Interrupt()
- func (pool *ReturnableTaskPool) IsAllDone() bool
- func (pool *ReturnableTaskPool) IsInterrupt() bool
- func (pool *ReturnableTaskPool) Retry(task T)
- func (pool *ReturnableTaskPool) SaveTaskList(file string) error
- func (pool *ReturnableTaskPool[T, R]) Start(ignoreEmpty bool) []R
- type TaskPool
- func NewNoDelayTaskPool[T comparable](concurrent int, taskList []T, runFunction func(task T, taskPool *TaskPool[T]), ...) *TaskPool[T]
- func NewSimpleTaskPool[T comparable](concurrent int, taskList []T, runFunction func(task T, taskPool *TaskPool[T])) *TaskPool[T]
- func NewTaskPool[T comparable](concurrent int, createInterval, executeDelay time.Duration, taskList []T, ...) *TaskPool[T]
- func (pool *TaskPool) DisableTaskAutoSave()
- func (pool *TaskPool) EnableTaskAutoSave(file string, interval time.Duration)
- func (pool *TaskPool) GetAllTaskList() []T
- func (pool *TaskPool) GetQueuedTaskList() []T
- func (pool *TaskPool) GetRunningTaskList() []T
- func (pool *TaskPool) Interrupt()
- func (pool *TaskPool) IsAllDone() bool
- func (pool *TaskPool) IsInterrupt() bool
- func (pool *TaskPool) Retry(task T)
- func (pool *TaskPool) SaveTaskList(file string) error
- func (pool *TaskPool[T]) Start()
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func LoadTaskFile ¶ added in v2.1.0
func LoadTaskFile[T comparable](path string) ([]T, error)
LoadTaskFile 从保存的任务文件中读取任务对象
- path 读取保存的任务文件
返回读取并反序列化后的任务对象切片
Types ¶
type ReturnableTaskPool ¶
type ReturnableTaskPool[T, R comparable] struct { // contains filtered or unexported fields }
ReturnableTaskPool 并发任务池,用于执行指定数量的并发多任务,其中任务是无返回值的
func NewNoDelayReturnableTaskPool ¶ added in v2.1.0
func NewNoDelayReturnableTaskPool[T, R comparable](concurrent int, taskList []T, runFunction func(task T, taskPool *ReturnableTaskPool[T, R]) R, shutdownFunction func(taskPool *ReturnableTaskPool[T, R]), lookupFunction func(taskPool *ReturnableTaskPool[T, R])) *ReturnableTaskPool[T, R]
NewNoDelayReturnableTaskPool 创建一个并发任务池,无任何延迟 其中:
- worker创建时间间隔为0
- worker执行任务延迟为0
参数:
- concurrent 任务并发数,即worker数量,每一个worker负责在一个单独的线程中运行任务,当队列中任务数量足够时,并发任务池会一直保持有concurrent个任务一直在并发运行
- taskList 存放全部任务的切片
- runFunction 自定义执行任务逻辑的回调函数,其参数为: task 从任务队列中取出的一个任务对象,该任务对象可在该函数中被处理并进一步执行任务,该函数调用在一个单独的线程中运行 taskPool 并发任务池本身,可通过任务池对象进行重试操作或者中断等
- shutdownFunction 接收到终止信号后的自定义停机逻辑回调函数,可以指定为nil,其参数为: taskPool 并发任务池本身,可在每个任务执行时通过该任务池访问任务池中的队列或者中断任务池等
- lookupFunction 任务池执行时,可用于实时查看任务池状态的自定义回调函数,可以指定为nil, 该回调函数会在任务池执行任务时被不间断调用 任务池全部任务执行完成后,该回调函数不会再被调用 其参数为: taskPool 并发任务池本身,可从中实时读取任务池状态
func NewReturnableTaskPool ¶
func NewReturnableTaskPool[T, R comparable](concurrent int, createInterval, executeDelay time.Duration, taskList []T, runFunction func(task T, taskPool *ReturnableTaskPool[T, R]) R, shutdownFunction func(taskPool *ReturnableTaskPool[T, R]), lookupFunction func(taskPool *ReturnableTaskPool[T, R])) *ReturnableTaskPool[T, R]
NewReturnableTaskPool 通过现有的任务列表创建任务池
- concurrent 任务并发数,即worker数量,每一个worker负责在一个单独的线程中运行任务,当队列中任务数量足够时,并发任务池会一直保持有concurrent个任务一直在并发运行
- createInterval 创建worker时的时间间隔 若设为0则会在开启并发任务池时同时创建完成全部worker 该参数不影响任务池执行时worker从队列取出任务的速度,仅仅代表任务池初始化时创建worker的间隔
- executeDelay worker执行每个任务之前的延迟 若设为0则所有worker每次从任务队列取出任务后就立即执行 否则,当worker每次从任务队列取出任务时,会延迟一段时间再执行任务
- taskList 存放全部任务的切片
- runFunction 自定义执行任务逻辑的回调函数,其参数为: task 从任务队列中取出的一个任务对象,该任务对象可在该函数中被处理并进一步执行任务,该函数调用在一个单独的线程中运行 taskPool 并发任务池本身,可通过任务池对象进行重试操作或者中断等 返回值:每个任务执行完成后的返回结果
- shutdownFunction 接收到终止信号后的自定义停机逻辑回调函数,可以指定为nil,其参数为: taskPool 并发任务池本身,可在每个任务执行时通过该任务池访问任务池中的队列或者中断任务池等
- lookup 任务池执行时,可用于实时查看任务池状态的自定义回调函数,可以指定为nil 该回调函数会在任务池执行任务时被不间断调用 任务池全部任务执行完成后,该回调函数不会再被调用 其参数为: taskPool 当前并发任务池对象,可从中实时读取任务池状态
返回一个新建的有返回值的并发任务池对象指针
func NewSimpleReturnableTaskPool ¶ added in v2.1.0
func NewSimpleReturnableTaskPool[T, R comparable](concurrent int, taskList []T, runFunction func(task T, taskPool *ReturnableTaskPool[T, R]) R) *ReturnableTaskPool[T, R]
NewSimpleReturnableTaskPool 创建一个有返回值的并发任务池,使用最简单的参数组合 其中:
- worker创建时间间隔为0
- worker执行任务延迟为0
- 没有自定义停机逻辑和自定义lookup逻辑
参数:
- concurrent 任务并发数,即worker数量,每一个worker负责在一个单独的线程中运行任务,当队列中任务数量足够时,并发任务池会一直保持有concurrent个任务一直在并发运行
- taskList 存放全部任务的切片
- runFunction 自定义执行任务逻辑的回调函数,其参数为: task 从任务队列中取出的一个任务对象,该任务对象可在该函数中被处理并进一步执行任务,该函数调用在一个单独的线程中运行 taskPool 并发任务池本身,可通过任务池对象进行重试操作或者中断等 返回值:每个任务执行完成后的返回结果
func (*ReturnableTaskPool) DisableTaskAutoSave ¶ added in v2.1.0
func (pool *ReturnableTaskPool) DisableTaskAutoSave()
DisableTaskAutoSave 关闭自动任务保存 在使用 EnableTaskAutoSave 后,若后续不再需要自动保存任务,则可以调用该函数关闭自动保存 此外,任务池全部任务执行完成后或者被中断时,该方法也会被自动调用关闭自动任务保存
func (*ReturnableTaskPool) EnableTaskAutoSave ¶ added in v2.1.0
EnableTaskAutoSave 启用自动任务保存 调用该方法后,每隔指定的时间,就会调用 SaveTaskList 方法一次保存任务
- file 任务文件保存位置
- interval 自动保存间隔
func (*ReturnableTaskPool) GetAllTaskList ¶ added in v2.1.0
func (pool *ReturnableTaskPool) GetAllTaskList() []T
GetAllTaskList 获取全部任务,即:任务队列中正在排队的任务 + 正在执行的任务
返回任务池中全部任务
func (*ReturnableTaskPool) GetQueuedTaskList ¶ added in v2.1.0
func (pool *ReturnableTaskPool) GetQueuedTaskList() []T
GetQueuedTaskList 获取并发任务池中的全部位于任务队列中的任务列表
返回当前并发任务池中,位于任务队列中的全部任务(还在排队且未执行的任务)
func (*ReturnableTaskPool) GetRunningTaskList ¶
func (pool *ReturnableTaskPool) GetRunningTaskList() []T
GetRunningTaskList 获取并发任务池中正在执行的任务列表
返回当前并发任务池全部正在执行的任务
func (*ReturnableTaskPool) Interrupt ¶
func (pool *ReturnableTaskPool) Interrupt()
Interrupt 中断任务池,立即停止任务池中正在执行的任务
func (*ReturnableTaskPool) IsAllDone ¶
func (pool *ReturnableTaskPool) IsAllDone() bool
IsAllDone 返回该并发任务池是否完成了全部任务 任务队列中无任务,且正在执行的任务集合中也没有任务了,说明全部任务完成
当并发任务池全部任务执行完成时,返回true
func (*ReturnableTaskPool) IsInterrupt ¶ added in v2.1.1
func (pool *ReturnableTaskPool) IsInterrupt() bool
IsInterrupt 返回任务池对象是否已被中断
如果调用过Interrupt方法,或者任务池接收到终止信号(例如Ctrl + C)之后,该方法返回true 正常完成并结束了全部任务的任务池不视为中断,调用该方法仍返回false
func (*ReturnableTaskPool) Retry ¶
func (pool *ReturnableTaskPool) Retry(task T)
Retry 重试任务,若任务执行失败,可将当前任务对象重新放回并发任务池的任务队列中,使其在后续重新执行
task 要放回任务队列进行重试的任务
func (*ReturnableTaskPool) SaveTaskList ¶ added in v2.1.0
SaveTaskList 将并发任务池中的全部任务(包括队列任务和正在执行的任务)序列化并保存至本地 需要将任务对象的必要字段导出,并使用json标签才能够保存
- file 任务文件保存位置
若出现错误,则返回错误对象
func (*ReturnableTaskPool[T, R]) Start ¶
func (pool *ReturnableTaskPool[T, R]) Start(ignoreEmpty bool) []R
Start 启动并发任务池
- ignoreEmpty 是否收集空的任务执行返回值
返回全部任务执行后的返回值列表
type TaskPool ¶
type TaskPool[T comparable] struct { // contains filtered or unexported fields }
TaskPool 并发任务池,用于执行指定数量的并发多任务,其中任务是无返回值的
func NewNoDelayTaskPool ¶ added in v2.1.0
func NewNoDelayTaskPool[T comparable](concurrent int, taskList []T, runFunction func(task T, taskPool *TaskPool[T]), shutdownFunction func(taskPool *TaskPool[T]), lookupFunction func(taskPool *TaskPool[T])) *TaskPool[T]
NewNoDelayTaskPool 创建一个并发任务池,无任何延迟 其中:
- worker创建时间间隔为0
- worker执行任务延迟为0
参数:
- concurrent 任务并发数,即worker数量,每一个worker负责在一个单独的线程中运行任务,当队列中任务数量足够时,并发任务池会一直保持有concurrent个任务一直在并发运行
- taskList 存放全部任务的切片
- runFunction 自定义执行任务逻辑的回调函数,其参数为: task 从任务队列中取出的一个任务对象,该任务对象可在该函数中被处理并进一步执行任务,该函数调用在一个单独的线程中运行 taskPool 并发任务池本身,可通过任务池对象进行重试操作或者中断等
- shutdownFunction 接收到终止信号后的自定义停机逻辑回调函数,可以指定为nil,其参数为: taskPool 并发任务池本身,可在每个任务执行时通过该任务池访问任务池中的队列或者中断任务池等
- lookupFunction 任务池执行时,可用于实时查看任务池状态的自定义回调函数,可以指定为nil, 该回调函数会在任务池执行任务时被不间断调用 任务池全部任务执行完成后,该回调函数不会再被调用 其参数为: taskPool 并发任务池本身,可从中实时读取任务池状态
func NewSimpleTaskPool ¶ added in v2.1.0
func NewSimpleTaskPool[T comparable](concurrent int, taskList []T, runFunction func(task T, taskPool *TaskPool[T])) *TaskPool[T]
NewSimpleTaskPool 创建一个并发任务池,使用最简单的参数组合 其中:
- worker创建时间间隔为0
- worker执行任务延迟为0
- 没有自定义停机逻辑和自定义lookup逻辑
参数:
- concurrent 任务并发数,即worker数量,每一个worker负责在一个单独的线程中运行任务,当队列中任务数量足够时,并发任务池会一直保持有concurrent个任务一直在并发运行
- taskList 存放全部任务的切片
- runFunction 自定义执行任务逻辑的回调函数,其参数为: task 从任务队列中取出的一个任务对象,该任务对象可在该函数中被处理并进一步执行任务,该函数调用在一个单独的线程中运行 taskPool 并发任务池本身,可通过任务池对象进行重试操作或者中断等
func NewTaskPool ¶
func NewTaskPool[T comparable](concurrent int, createInterval, executeDelay time.Duration, taskList []T, runFunction func(task T, taskPool *TaskPool[T]), shutdownFunction func(taskPool *TaskPool[T]), lookupFunction func(taskPool *TaskPool[T])) *TaskPool[T]
NewTaskPool 通过现有的任务列表创建任务池
- concurrent 任务并发数,即worker数量,每一个worker负责在一个单独的线程中运行任务,当队列中任务数量足够时,并发任务池会一直保持有concurrent个任务一直在并发运行
- createInterval 创建worker时的时间间隔 若设为0则会在开启并发任务池时同时创建完成全部worker 该参数不影响任务池执行时worker从队列取出任务的速度,仅仅代表任务池初始化时创建worker的间隔
- executeDelay worker执行每个任务之前的延迟 若设为0则所有worker每次从任务队列取出任务后就立即执行 否则,当worker每次从任务队列取出任务时,会延迟一段时间再执行任务
- taskList 存放全部任务的切片
- runFunction 自定义执行任务逻辑的回调函数,其参数为: task 从任务队列中取出的一个任务对象,该任务对象可在该函数中被处理并进一步执行任务,该函数调用在一个单独的线程中运行 taskPool 并发任务池本身,可通过任务池对象进行重试操作或者中断等
- shutdownFunction 接收到终止信号后的自定义停机逻辑回调函数,可以指定为nil,其参数为: taskPool 并发任务池本身,可在每个任务执行时通过该任务池访问任务池中的队列或者中断任务池等
- lookupFunction 任务池执行时,可用于实时查看任务池状态的自定义回调函数,可以指定为nil, 该回调函数会在任务池执行任务时被不间断调用 任务池全部任务执行完成后,该回调函数不会再被调用 其参数为: taskPool 并发任务池本身,可从中实时读取任务池状态
返回一个新建的无返回值的并发任务池对象指针
func (*TaskPool) DisableTaskAutoSave ¶ added in v2.1.0
func (pool *TaskPool) DisableTaskAutoSave()
DisableTaskAutoSave 关闭自动任务保存 在使用 EnableTaskAutoSave 后,若后续不再需要自动保存任务,则可以调用该函数关闭自动保存 此外,任务池全部任务执行完成后或者被中断时,该方法也会被自动调用关闭自动任务保存
func (*TaskPool) EnableTaskAutoSave ¶ added in v2.1.0
EnableTaskAutoSave 启用自动任务保存 调用该方法后,每隔指定的时间,就会调用 SaveTaskList 方法一次保存任务
- file 任务文件保存位置
- interval 自动保存间隔
func (*TaskPool) GetAllTaskList ¶ added in v2.1.0
func (pool *TaskPool) GetAllTaskList() []T
GetAllTaskList 获取全部任务,即:任务队列中正在排队的任务 + 正在执行的任务
返回任务池中全部任务
func (*TaskPool) GetQueuedTaskList ¶ added in v2.1.0
func (pool *TaskPool) GetQueuedTaskList() []T
GetQueuedTaskList 获取并发任务池中的全部位于任务队列中的任务列表
返回当前并发任务池中,位于任务队列中的全部任务(还在排队且未执行的任务)
func (*TaskPool) GetRunningTaskList ¶
func (pool *TaskPool) GetRunningTaskList() []T
GetRunningTaskList 获取并发任务池中正在执行的任务列表
返回当前并发任务池全部正在执行的任务
func (*TaskPool) IsAllDone ¶
func (pool *TaskPool) IsAllDone() bool
IsAllDone 返回该并发任务池是否完成了全部任务 任务队列中无任务,且正在执行的任务集合中也没有任务了,说明全部任务完成
当并发任务池全部任务执行完成时,返回true
func (*TaskPool) IsInterrupt ¶ added in v2.1.1
func (pool *TaskPool) IsInterrupt() bool
IsInterrupt 返回任务池对象是否已被中断
如果调用过Interrupt方法,或者任务池接收到终止信号(例如Ctrl + C)之后,该方法返回true 正常完成并结束了全部任务的任务池不视为中断,调用该方法仍返回false
func (*TaskPool) Retry ¶
func (pool *TaskPool) Retry(task T)
Retry 重试任务,若任务执行失败,可将当前任务对象重新放回并发任务池的任务队列中,使其在后续重新执行
task 要放回任务队列进行重试的任务
func (*TaskPool) SaveTaskList ¶ added in v2.1.0
SaveTaskList 将并发任务池中的全部任务(包括队列任务和正在执行的任务)序列化并保存至本地 需要将任务对象的必要字段导出,并使用json标签才能够保存
- file 任务文件保存位置
若出现错误,则返回错误对象