我每天使用CronJob来启动我的任务,我的任务有几个子任务,我计划使用goroutine来运行。但是,事情并不顺利。文件框架|-gpool| -pool.go|-main.gomain.goimport ( "code.byted.org/i18n_web/content_import_tool_cronJob/gpool" "fmt" "github.com/robfig/cron/v3" "log" "os" "runtime" "time" ) func SeedJob(it string, pool *gpool.Pool){ fmt.Println("Name item: ", it) println(runtime.NumGoroutine()) pool.Done() } type delayJob struct { PagePatternNameList []string } func (j *delayJob) GetPagePatternNameList() { //j.PagePatternNameList = dal.GetPagePatternName() j.PagePatternNameList = []string{"atama_posts","cchan_posts", "cookdoor_posts", "cookpad_posts", "cookpad_recipe_seed", "kurashiru_posts", "lips_all_posts", "lips_product", "lips_product_sku_seed", "lips_rank", "press_posts", "voce_all_posts", "zozo_posts_women"} } func (j *delayJob)Run(){ log.Println("delay Job RUN") //time.Sleep(2 * time.Second) // startSeedJob pool := gpool.New(10) println(runtime.NumGoroutine()) for _, it := range j.PagePatternNameList { pool.Add(1) go SeedJob(it, pool) } pool.Wait() println(runtime.NumGoroutine()) } func main() { c := cron.New( cron.WithLogger( cron.VerbosePrintfLogger(log.New(os.Stdout, "cron: ", log.LstdFlags)))) _, err := c.AddJob("CRON_TZ=America/New_York @every 2m", cron.NewChain(cron.DelayIfStillRunning(cron.DefaultLogger)).Then(&delayJob{})) if err != nil { fmt.Println("Cron Job err!") return } fmt.Println("it started") c.Start() defer c.Stop() time.Sleep(time.Second * 5) }
1 回答

九州编程
TA贡献1785条经验 获得超4个赞
它没有运行,因为您计划作业每 2 分钟运行一次,然后只等待 5 秒,然后您从中返回,从而导致程序退出。main()
如果要在后台启动此 cron,则必须使程序运行足够长的时间,以便它运行并完成,在本例中至少超过 2 分钟。
如果您没有其他事情要做,那么您可以考虑使用而不是 。main()
c.Run()
c.Start()
- 1 回答
- 0 关注
- 95 浏览
添加回答
举报
0/150
提交
取消