亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么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 關注
  • 97 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號