为了账号安全,请及时绑定邮箱和手机立即绑定

为什么golang CronJob不能在goroutine内运行?

为什么golang CronJob不能在goroutine内运行?

Go
慕尼黑5688855 2022-09-05 17:05:38
我每天使用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()


查看完整回答
反对 回复 2022-09-05
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号