幾個小時後,我有太多的打開的文件,我不斷收到錯誤。我是否正確關閉此功能?
我已經編輯了ulimit -n
,但似乎只是延長了發生錯誤之前的時間並使程序崩潰。
我相信我已經縮小到這個功能,我只是不確定我是否正確地關閉它。
我現在有一個功能
go func() {
if _, err := io.Copy(rw, stdout); err != nil {
if !WritePipeBroken.MatchString(err.Error()) &&
!ConnectionResetByPeer.MatchString(err.Error()) {
rollbar.Error(rollbar.ERR, err)
}
log.Printf("pipeThruFfmpegToMp3: %v\n", err)
if err := ffmpeg.Process.Kill(); err != nil {
log.Printf("pipeThruFfmpegToMp3: %v\n", err)
}
}
rw.Flush()
wg.Done()
}()
我相信這是掛,所以我應該這樣做,而不是
go func() {
if _, err := io.Copy(rw, stdout); err != nil {
if !WritePipeBroken.MatchString(err.Error()) &&
!ConnectionResetByPeer.MatchString(err.Error()) {
rollbar.Error(rollbar.ERR, err)
}
log.Printf("pipeThruFfmpegToMp3: %v\n", err)
if err := ffmpeg.Process.Kill(); err != nil {
log.Printf("pipeThruFfmpegToMp3: %v\n", err)
}
}
if ffmpeg.Process != nil {
ffmpeg.Process.Kill()
}
if stdout != nil {
stdin.Close()
}
rw.Flush()
wg.Done()
}()
什麼是'rw'變量嗎?另外,'Copy'函數有兩個參數 - destination和source。你使用'stdout'作爲顯然是錯誤的來源。 – creker
rw是''rw web.ResponseWriter''',在這種情況下不能確定使用''stdout'''是錯誤的,因爲我正在管道應用 – nadermx