當前位置: 首頁>>代碼示例>>Golang>>正文


Golang WorkSpecMeta.CanStartContinuous方法代碼示例

本文整理匯總了Golang中github.com/dmaze/goordinate/coordinate.WorkSpecMeta.CanStartContinuous方法的典型用法代碼示例。如果您正苦於以下問題:Golang WorkSpecMeta.CanStartContinuous方法的具體用法?Golang WorkSpecMeta.CanStartContinuous怎麽用?Golang WorkSpecMeta.CanStartContinuous使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在github.com/dmaze/goordinate/coordinate.WorkSpecMeta的用法示例。


在下文中一共展示了WorkSpecMeta.CanStartContinuous方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。

示例1: getWorkFromSpec

// getWorkFromSpec forcibly retrieves a work unit from a work spec.
// It could create a work unit if spec is a continuous spec with no
// available units.  It ignores other constraints, such as whether the
// work spec is paused.
func (w *worker) getWorkFromSpec(spec *workSpec, meta *coordinate.WorkSpecMeta) *attempt {
	var unit *workUnit
	now := w.Coordinate().clock.Now()
	if len(spec.available) != 0 {
		unit = spec.available.Next()
	} else if meta.CanStartContinuous(now) {
		// Make a brand new work unit.  Its key is the string
		// form of a time_t.
		seconds := now.Unix()
		nano := now.Nanosecond()
		milli := nano / 1000000
		name := fmt.Sprintf("%d.%03d", seconds, milli)
		var exists bool
		unit, exists = spec.workUnits[name]
		if !exists {
			unit = &workUnit{
				name:     name,
				data:     map[string]interface{}{},
				workSpec: spec,
			}
			spec.workUnits[name] = unit
		}
		spec.meta.NextContinuous = now.Add(meta.Interval)
	} else {
		return nil
	}
	return w.makeAttempt(unit, time.Duration(0))
}
開發者ID:dmaze,項目名稱:goordinate,代碼行數:32,代碼來源:worker.go

示例2: requestAttemptsForSpec

func (w *worker) requestAttemptsForSpec(req coordinate.AttemptRequest, spec *workSpec, meta *coordinate.WorkSpecMeta) ([]coordinate.Attempt, error) {
	var (
		attempts []coordinate.Attempt
		count    int
		err      error
	)

	// Adjust the work unit count based on what's possible here
	count = req.NumberOfWorkUnits
	if count < 1 {
		count = 1
	}
	if meta.MaxAttemptsReturned > 0 && count > meta.MaxAttemptsReturned {
		count = meta.MaxAttemptsReturned
	}
	if meta.MaxRunning > 0 && count > meta.MaxRunning-meta.PendingCount {
		count = meta.MaxRunning - meta.PendingCount
	}

	// Now choose units and create attempts
	err = withTx(w, func(tx *sql.Tx) error {
		units, err := w.chooseWorkUnits(tx, spec, count)
		if err != nil {
			return err
		}
		now := w.Coordinate().clock.Now()
		if len(units) == 0 && meta.CanStartContinuous(now) {
			units, err = w.createContinuousUnits(tx, spec, meta)
		}
		if err != nil {
			return err
		}
		length := time.Duration(15) * time.Minute
		for _, unit := range units {
			a, err := makeAttempt(tx, unit, w, length)
			if err != nil {
				return err
			}
			attempts = append(attempts, a)
		}
		return nil
	})
	return attempts, err
}
開發者ID:dmaze,項目名稱:goordinate,代碼行數:44,代碼來源:attempt.go


注:本文中的github.com/dmaze/goordinate/coordinate.WorkSpecMeta.CanStartContinuous方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。