- 整理tasksch
This commit is contained in:
@@ -24,13 +24,11 @@ type ParallelConfig struct {
|
||||
ParallelCount int
|
||||
BatchSize int
|
||||
IsContinueWhenError bool
|
||||
ResultHandler ResultHandlerFunc
|
||||
}
|
||||
|
||||
type ParallelTask struct {
|
||||
BaseTask
|
||||
|
||||
resultHandler ResultHandlerFunc
|
||||
worker WorkFunc
|
||||
jobList [][]interface{}
|
||||
taskChan chan []interface{}
|
||||
@@ -49,7 +47,6 @@ func NewParallelConfig() *ParallelConfig {
|
||||
IsContinueWhenError: false,
|
||||
ParallelCount: DefParallelCount,
|
||||
BatchSize: 1,
|
||||
ResultHandler: nil,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,11 +70,6 @@ func (c *ParallelConfig) SetIsContinueWhenError(isContinueWhenError bool) *Paral
|
||||
// return c
|
||||
// }
|
||||
|
||||
func (c *ParallelConfig) SetResultHandler(resultHandler ResultHandlerFunc) *ParallelConfig {
|
||||
c.ResultHandler = resultHandler
|
||||
return c
|
||||
}
|
||||
|
||||
func NewParallelTask(taskName string, config *ParallelConfig, ctx *jxcontext.Context, worker WorkFunc, itemList interface{}, params ...interface{}) *ParallelTask {
|
||||
if config == nil {
|
||||
config = NewParallelConfig()
|
||||
@@ -97,7 +89,6 @@ func NewParallelTask(taskName string, config *ParallelConfig, ctx *jxcontext.Con
|
||||
task := &ParallelTask{
|
||||
subFinishChan: make(chan interface{}, config.ParallelCount),
|
||||
taskChan: make(chan []interface{}, len(realItemList)),
|
||||
resultHandler: config.ResultHandler,
|
||||
worker: worker,
|
||||
jobList: jobList,
|
||||
}
|
||||
@@ -135,7 +126,7 @@ func (task *ParallelTask) Run() {
|
||||
} else {
|
||||
globals.SugarLogger.Infof("ParallelTask.Run %s, subtask(job:%s, params:%s) result:%v, failed with error:%v", task.Name, utils.Format4Output(job, true), utils.Format4Output(task.params, true), result, err)
|
||||
task.locker.Lock()
|
||||
task.detailErrList = append(task.detailErrList, err)
|
||||
task.batchErrList = append(task.batchErrList, err)
|
||||
task.locker.Unlock()
|
||||
if !task.IsContinueWhenError { // 出错
|
||||
chanRetVal = err
|
||||
@@ -175,12 +166,11 @@ func (task *ParallelTask) Run() {
|
||||
taskResult = append(taskResult, resultList...)
|
||||
}
|
||||
}
|
||||
|
||||
task.locker.Lock()
|
||||
if taskErr != nil { // 如果有错误,肯定就是失败了
|
||||
task.Status = TaskStatusFailed
|
||||
} else {
|
||||
if len(task.taskChan) > 0 {
|
||||
if task.FinishedJobCount+task.FailedJobCount < task.TotalJobCount {
|
||||
taskErr = ErrTaskIsCanceled
|
||||
task.Status = TaskStatusCanceled
|
||||
} else {
|
||||
@@ -191,21 +181,19 @@ func (task *ParallelTask) Run() {
|
||||
task.OriginalErr = taskErr
|
||||
task.Err = NewTaskError(task.Name, taskErr)
|
||||
} else {
|
||||
if len(task.detailErrList) > 0 {
|
||||
task.OriginalErr = task.detailErrList[0]
|
||||
if len(task.batchErrList) > 0 {
|
||||
task.OriginalErr = task.batchErrList[0]
|
||||
}
|
||||
task.Err = task.buildTaskErrFromDetail()
|
||||
task.Err = task.buildTaskErrFromBatchErrList()
|
||||
}
|
||||
task.Result = taskResult
|
||||
task.TerminatedAt = time.Now()
|
||||
task.jobList = nil // 如果不释放,任务被管理的话,会导致内存不能释放
|
||||
task.locker.Unlock()
|
||||
globals.SugarLogger.Debugf("ParallelTask.Run %s, err:%v", task.Name, task.Err)
|
||||
close(task.subFinishChan)
|
||||
|
||||
if task.resultHandler != nil {
|
||||
task.resultHandler(task.Name, taskResult, task.Err)
|
||||
}
|
||||
close(task.subFinishChan)
|
||||
task.jobList = nil // 如果不释放,任务被管理的话,会导致内存不能释放
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user