我有一个计时任务,以在Golang中执行最佳方法。
sellers
中的JSON中sellers
保存在数据库中之后,我需要浏览另一个带有sellersID
参数的大型JSON Web服务,以保存到另一个名为customers
的表中。customer
都有一个初始状态,如果此状态已从Web服务(n°2)的数据更改,则我需要将差异存储在另一个表{{1}中}具有更改历史记录。changes
var wg sync.WaitGroup
action.FetchSellers() // fetch large JSON and stort in sellers table ~2min
sellers := action.ListSellers()
for _, s := range sellers {
wg.Add(1)
go action.FetchCustomers(&wg, s) // fetch multiple large JSON and stort in customers table and store notify... ~20sec
}
wg.Wait()
函数完成了许多我认为可以通过并发方式完成的工作。我需要每小时运行一次此代码,因此需要精心构建,目前可以正常运行,但不是最佳方式。 我认为像这样的示例Go by Example: Worker Pools考虑在Go中使用工人池,但是我很难想到它
答案 0 :(得分:-1)
不要混蛋!但是我会在这种事情上使用队列。我已经创建了一个库并使用了它。 github.com/AnikHasibul/queue
// Limit the max
maximumJobLimit := 50
// Open a new queue with the limit
q := queue.New(maximumJobLimit)
defer q.Close()
// simulate a large amount of jobs
for i := 0; i != 1000; i++ {
// Add a job to queue
q.Add()
// Run your long long long job here in a goroutine
go func(c int) {
// Must call Done() after finishing the job
defer q.Done()
time.Sleep(time.Second)
fmt.Println(c)
}(i)
}
//wait for the end of the all jobs
q.Wait()
// Done!