我有一个 API,它接收要处理的 CSV 文件。我希望能够在后台处理文件时发回(或任何状态)。我有一个处理程序,它检查请求,写入成功标头,然后通过生产者/消费者模式继续处理。问题是,由于调用,接受的标头不会发送回去。处理程序验证上的错误正在正确发送回去,但这是由于语句造成的。202 AcceptedWaitGroup.Wait()return
是否可以像我希望的那样与等待组一起将其发回(如果是这样,我错过了什么)?202 Accepted
func SomeHandler(w http.ResponseWriter, req *http.Request) {
endAccepted := time.Now()
err := verifyRequest(req)
if err != nil {
w.WriteHeader(http.StatusBadRequest)
data := JSONErrors{Errors: []string{err.Error()}}
json.NewEncoder(w).Encode(data)
return
}
// ...FILE RETRIEVAL CLIPPED (not relevant)...
// e.g. csvFile, openErr := os.Open(tmpFile.Name())
//////////////////////////////////////////////////////
// TODO this isn't sending due to the WaitGroup.Wait()s below
w.WriteHeader(http.StatusAccepted)
//////////////////////////////////////////////////////
// START PRODUCER/CONSUMER
jobs := make(chan *Job, 100) // buffered channel
results := make(chan *Job, 100) // buffered channel
// start consumers
for i := 0; i < 5; i++ { // 5 consumers
wg.Add(1)
go consume(i, jobs, results)
}
// start producing
go produce(jobs, csvFile)
// start processing
wg2.Add(1)
go process(results)
wg.Wait() // wait for all workers to finish processing jobs
close(results)
wg2.Wait() // wait for process to finish
log.Println("===> Done Processing.")
}
郎朗坤
犯罪嫌疑人X
随时随地看视频慕课网APP
相关分类