几个小时后,我有太多的打开的文件,我不断收到错误。我是否正确关闭此功能?
我已经编辑了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