定時 週期排程 等待時間的go語言標準實現

2021-08-22 19:04:03 字數 2722 閱讀 5592

- 在平台開發過程中,當有些執行完某些操作後,可能還需要等待直到某個條件滿足的時候

- 比如在cmdb刪除了乙個專案,cmdb需要一直等待其他系統資源**完,才能在自身徹底釋放對應的資源, 那就需要一直在**等待

今天主要是乙個關於定時輪訓、等待的工具方法實現

package wait

import (

"errors"

"math/rand"

"time"

)// jitter 允許時間在一定範圍內的波動

func jitter(duration time.duration, maxfactor float64) time.duration

wait := duration + time.duration(rand.float64()*maxfactor*float64(duration))

return wait

}// resetreusetimer 重置timer

func resetreusetimer(t *time.timer, d time.duration, sawtimeout bool) *time.timer

if !t.stop() && !sawtimeout

t.reset(d)

return t

}// handlercrash 控制失敗異常

func handlercrash()

// jitterutil 週期排程函式執行

func jitterutil(f func(), period time.duration, jitte***ctor float64, sliding bool, stopch

struct{})

jitteredperiod := period

if jitte***ctor >0.0

if !sliding

func() ()

if sliding

select

}}// util 是封裝的jitterutil並提供了jitte***ctor和sliding的預設值

func util(f func(), period time.duration, stopch

struct{})

// waiterfunc 等待某個函式執行

type waitfunc func(done

struct{})

struct{}

// conditionfunc 等待函式條件唄滿足

type conditionfunc func() (done bool, err error)

var errwaittimeout = errors.new("timed out waiting for the condition")

// waitfor 執行某個函式活著某個條件唄滿足

func waitfor(wait waitfunc, fn conditionfunc, done

struct{}) error

if ok

if !open

}return errwaittimeout

}func poller(interval, timeout time.duration) waitfunc )

struct{} )

gofunc()

for {}:

default:

}case

return

case

return}}

}()return ch

})}// pollinternal

func pollinternal(wait waitfunc, condition conditionfunc) error )

defer

close(done)

return waitfor(wait, condition, done)

}// poll 提供對外統一的介面

func poll(interval, timeout time.duration, condition conditionfunc) error

**都比較簡單, 但在k8s裡面很多資源更新方法裡面,都使用了這些函式, 比如job的更新裡面

// updatejobfunc updates the job object. it retries if there is a conflict, throw out error if

// there is any other errors. name is the job name, updatefn is the function updating the

// job object.

func updatejobfunc(c clientset.inte***ce, ns, name string, updatefn func(job *batch.job))

updatefn(job)

_, err = updatejob(c, ns, job)

if err == nil

if errors.isconflict(err)

return

false, fmt.errorf("failed to update job %q: %v", name, err)

}))}

今天寫的比較簡單,都是晚上回來看的,白天還藥做平台開發,今天就這樣吧

形容等待時間長的句子 描寫等待時間漫長的詞語句子

等待句子 魚沈雁杳天涯路,始信人間別離苦。君當作磐石,妾當作蒲葦。蒲葦韌如絲,磐石無轉移。在天願作比翼鳥,在地願為連理枝。有美人兮,見之不忘,一日不見兮,思之如狂。衣帶漸寬終不悔,為伊消得人憔悴。必須如蜜蜂一樣,採過許多花,才能釀出蜜來。春蠶到死絲方盡,蠟炬成灰淚始乾。人生自是有情痴,此恨不關風與月...

形容等待時間長的句子 形容等待時間漫長的勵志名句

等待時間漫長的名言 1 等待之路需要與笑容攜手,只有樂觀地面對失敗,在等待的成功的路上越挫越勇,希望之火才會為你點燃。2 等待,如同企鵝登陸前的蓄勢,默默沉潛只為騰空而起劃出一道完美的弧線 等待,好似曇花一現前的醞釀,敲碎季節的容顏只為在清輝下吐出一抹芬芳 等待,恰若春暖花開前的冬眠,忍受寒風凜冽只...

形容等待時間長的句子 形容等待時間長的句子

七 心三十,淡淡的斑斕在期待那。愛由於心的凍結而死去雪卻凍結著心的跳動 冷暖自知 自始自終 自力更生二十 七 我一小我逛逛停停 在期待什麼我不曉得我,麼在期待著我就像不曉得什。就是備胎 六 備胎,多年的期待乙個交接一句不愛就能夠給你。有握住最想要牽的手若是從一起頭就沒,為不竭的尋找和遷就錯過的歲月就...