2017-03-09 3 views
1

클라우드 프로그램 용 사용자 지정 쓰기 인터페이스를 구현했습니다. 내 문제는 지금까지 필자가 파일을 내 작가에게 복사 한 후 필자에게 몇 가지 글을 남겼습니다. (대개 4 개는 약 4096 바이트를 씁니다.) 마지막 쓰기는 보통 4096보다 작습니다.글을 작성하기 전에 골 로그 프로그램이 파일을 닫습니다.

이것은 아직 발생하지 않았지만 마지막 쓰기가 4096 바이트이고 프로그램이 종료되지 않을 확률은 1/4096입니다.

저는 압축 프로그램에 이것을 사용하고 있으며 모든 쓰기 청크에 하나씩있는 io.EOF가 효과적이지 않습니다. 또한 작성자가 닫혀 있는지 확인하는 작업이 너무 빨라서 아직 수행해야하는 작업이 일부 있습니다.

이 상황을 처리하는 가장 좋은 방법은 무엇입니까?

*** EDIT ***** 필자는 더 강력한 Write(), Flush() 및 Close() 메서드를 구현했습니다. 이제는 Close()를 사용하면 모든 것이 좋지만 여전히 동일한 문제가 나는 수동으로 Close()를 호출하면 끝 부분에

+1

데이터를 아직 작성했는지 어떻게 알 수 있습니까? 모든 덩어리에 EOF가 있다면 뭔가 잘못하고있는 것입니다. – JimB

+0

그래서 파일을 열고 일부 바이트를 복사 한 다음 닫습니다. 이 부분은 작동합니다. 기본 "Writer"는 일반적으로 따라 잡는 데 시간이 걸립니다. 나는 청크를 쓰는 것으로 추측합니다. 그래서 파일이 닫히지 만 근본적인 작가는 거의 따라 잡기 시작합니다. – Godfrey

+0

일반 작성자는 버퍼링 된 모든 쓰기를 완료 할 때까지 닫기를 차단합니다. 나는 당신의 근원적 인 작가가 무엇인지 모르지만 그것이 제대로 작동하는 것처럼 들리지는 않는다. – JimB

답변

0

을 모두 쓸 수 있기 때문에 에서 모든 goroutines가 완료 될 때까지 waitgroup 을 기다릴 수 있습니다.

0

더 강력한 Close() 기능을 구현하면 문제가 해결되었습니다. 또한 Golang이 모든 Goroutines를 내부적으로 처리했는지 확인하기 위해 defer Close()을 사용했습니다.

관련 문제