cron과 같은 유형의 스케줄러는 데이터 처리를 할 때 반드시 필요합니다.
데이터과학자들은 주로 젠킨스(Jenkins)나 airflow를 사용하겠지만 Python이나 Go로 직접 작성해야 하는 경우도 종종 생깁니다.
패키지 “github.com/jasonlvhit/gocron” 를 사용하는 방법입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
package main import ( "fmt" "github.com/jasonlvhit/gocron" "time" ) func task() { fmt.Println("태스크를 실행합니다.") } func taskWithParams(a int, b string) { fmt.Println(a, b) } func main() { // 파라미터 없이 잡을 실행 gocron.Every(2).Seconds().Do(task) gocron.Every(1).Minute().Do(task) gocron.Every(2).Minutes().Do(task) gocron.Every(1).Hour().Do(task) gocron.Every(2).Hours().Do(task) gocron.Every(1).Day().Do(task) gocron.Every(2).Days().Do(task) gocron.Every(1).Week().Do(task) gocron.Every(2).Weeks().Do(task) // 파라미터를 지정해서 잡을 실행 gocron.Every(1).Second().Do(taskWithParams, 1, "hello") // 지정한 요일에 잡을 실행 gocron.Every(1).Monday().Do(task) gocron.Every(1).Thursday().Do(task) // 지정한 시각에 잡을 실행 - 'hour:min:sec' - seconds optional gocron.Every(1).Day().At("10:30").Do(task) gocron.Every(1).Monday().At("18:30").Do(task) gocron.Every(1).Tuesday().At("18:30:59").Do(task) // Begin job immediately upon start gocron.Every(1).Hour().From(gocron.NextTick()).Do(task) // Begin job at a specific date/time t := time.Date(2019, time.November, 10, 15, 0, 0, 0, time.Local) gocron.Every(1).Hour().From(&t).Do(task) // NextRun은 다음번 실행될 시간을 알려줌 _, time := gocron.NextRun() fmt.Println(time) // 지정한 태스크 제거 gocron.Remove(task) // 모든 스케줄 작업을 제거 gocron.Clear() // 모든 펜딩잡을 시작 <-gocron.Start() // 새 스케줄러를 생성해서 동시에 2개의 스케줄러를 실행 s := gocron.NewScheduler() s.Every(3).Seconds().Do(task) <-s.Start() } |