0

我有一个 jobWorker 应该处理工作,并且在这个工作人员中有数据库读写、日志文件、接收 api 和一些数据计算。

var mystruct strcut{}

func worker(v) {
   Get data from database
   ...
   Update database status
   ...
   useByWorker()
   ...
   Do some computing
   ...
   Receive API
   ...
   Write log file
}

func useByWorker() {
    mystruct = {1,2,3}
}

这是我运行 go-worker 的主要功能。

func main() {
    var wg sync.WaitGroup
    data := [][]string{}
    wg.Add(1)
    for k,v := range data {
        k := k
        v := v
        go func(k int, v []string) {
            fmt.Println(k,v)
            worker(v)
            wg.Done()
        }(k, v)
    }

    wg.Wait()
}

数据竞争问题让工作人员使用的日志和我的数据混淆了。任何方式都可以简单地解决没有锁(Mutex.Lock)的数据竞争问题。我希望工作可以更快地由工人处理。

任何建议或提示都会有所帮助。谢谢。

4

1 回答 1

1

如果您想要对文件进行非阻塞写访问,您可以使用一个 goroutine 通过通道写入文件传递消息。可以通过使用Channel Buffering来避免阻塞, 或者您可以使用标准 logger。它可以与多个 goroutine 一起工作。

于 2017-08-17T07:51:04.493 回答