문제

글쓰기를 위해 파일을 열고 며칠 동안 실행되는 프로세스가 있습니다. 비교적 임의의 순간에 파일에 무언가가 기록됩니다. 내 이해는 - 파일을 할 때까지 - 디스크에 실제로 저장된 것이 없을 가능성이 있습니다. 그게 사실인가요?

메인 프로세스가 아직 완료되지 않았을 때 시스템이 충돌하면 어떻게됩니까? 매번 헌신 할 수있는 방법이 있습니까? ... 10 분 (그리고 나는 이것을 스스로 커밋이라고 부릅니다. 타이머를 실행할 필요가 없습니다)? file.close () 및 Open (파일, 'A')이 유일한 방법입니까, 아니면 더 나은 대안이 있습니까?

도움이 되었습니까?

해결책

당신은 사용할 수 있어야합니다 file.flush() 이것을하기 위해.

다른 팁

추가 할 현재 프로세스를 죽이고 싶지 않다면 f.flush() (벌써 며칠 동안 실행중인 것 같습니까?), 당신은 괜찮을 것입니다. 더 커지기 위해 쓰는 파일이 보이면 해당 데이터를 잃지 않을 것입니다 ...

파이썬 문서에서 :

쓰기 (str)파일에 문자열을 씁니다. 반환 값이 없습니다. 버퍼링으로 인해 Flush () 또는 Close () 메소드가 호출 될 때까지 문자열이 실제로 파일에 표시되지 않을 수 있습니다.

Python의 버퍼링 시스템이 파일 객체를 자동으로 플러시하는 것처럼 들리지만 그러한 경우에는 보장되지 않습니다.

데이터가 디스크에 기록되었는지 확인하려면 사용하십시오. file.flush() 그 뒤에 os.fsync(file.fileno()).

이미 언급 된 바와 같이 .flush () 메소드를 사용하여 버퍼에서 쓰기를 강제로 사용하지만, 많은 전화를 사용하여 플러시를 사용하지 않으므로 실제로 글을 늦출 수 있습니다 (응용 프로그램이 빠른 쓰기에 의존하는 경우). 파일 시스템이 버퍼 크기보다 작은 변경 사항을 작성하여 무릎을 꿇을 수 있습니다. :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top