golang [Golang]执行长时间运行的作业并流式传输实时输出
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang [Golang]执行长时间运行的作业并流式传输实时输出相关的知识,希望对你有一定的参考价值。
Golang Robfig cron AddFunc 不会动态运行作业
【中文标题】Golang Robfig cron AddFunc 不会动态运行作业【英文标题】:Golang Robfig cron AddFunc does not dynamically run the jobs 【发布时间】:2021-12-01 00:09:07 【问题描述】:我正在使用 robfig/cron 模块开发 cron 作业服务。我面临的问题是它无法动态运行 cron 作业功能。例如,参考下面的代码
mapp := map[int]string1: "one", 2: "two", 3: "three"
cr := cron.New()
for integ, spell := range mapp
cr.AddFunc("@every 2s", func()
fmt.Println("Running Cron Spell:", spell, "Integer:",integ))
cr.Start()
每2秒输出如下
Running Cron Spell: three Integer: 3
Running Cron Spell: three Integer: 3
Running Cron Spell: three Integer: 3
所有 3 个 cron 作业的输出都是相同的。我期待它会给出这样的输出。
Running Cron Spell: one Integer: 1
Running Cron Spell: two Integer: 2
Running Cron Spell: three Integer: 3
我不确定这是一个错误还是我做错了。我的目标是让 cron 作业根据配置的值动态运行。有什么解决方法可以让它成为我想要的输出吗?
【问题讨论】:
【参考方案1】:在循环中重新分配范围变量:
for integ, spell := range mapp
integ, spell := integ, spell
cr.AddFunc("@every 2s", func()
fmt.Println("Running Cron Spell:", spell, "Integer:",integ))
范围变量与每次迭代中重复使用的变量相同。如果你关闭它,闭包(函数字面量)将看到迭代中的最后一个值。
【讨论】:
以上是关于golang [Golang]执行长时间运行的作业并流式传输实时输出的主要内容,如果未能解决你的问题,请参考以下文章