2009-03-03 2 views
5

필자는 쓰기를 위해 파일을 열었으며 며칠 동안 실행되는 프로세스가 비교적 무작위로 파일에 기록됩니다. 내 이해는 - file.close()를 수행 할 때까지는 디스크에 실제로 저장할 수있는 기회가 없습니다. 그게 사실이야?거기에 파이썬에서 COMMIT 아날로그 파일로 쓰는 것이 있습니까?

주 프로세스가 아직 완료되지 않은 경우 시스템이 중단되면 어떻게됩니까? 매 10 분마다 한 번씩 커밋을 수행 할 수있는 방법이 있습니까? (그리고 저는 이것을 커밋이라고 부릅니다 - 타이머를 실행할 필요가 없습니다)? 유일한 방법은 file.close() 및 open (file, 'a')입니까? 아니면 더 좋은 대안이 있습니까?

답변

17

이렇게하려면 file.flush()을 사용해야합니다.

3

f.flush() (이미 며칠 동안 실행 된 것 같은데요?)을 추가하기 위해 현재 프로세스를 죽이지 않으려면, 당신은 괜찮을 것입니다. 당신은 당신이 커지고에 기록 된 파일이 있으면, 당신은 파이썬 문서에서 데이터 ...

을 잃지 않을 것입니다

쓰기 (STR) 파일에 문자열을 작성합니다. 반환 값이 없습니다. 버퍼링으로 인해 문자열은 flush() 또는 close() 메서드가 호출 될 때까지 파일에 실제로 나타나지 않을 수 있습니다.

파이썬의 버퍼링 시스템이 자동으로 파일 객체를 플러시하는 것처럼 들리지만, 그런 일이 발생하면 보장 할 수 없습니다.

2

데이터가 디스크에 기록되도록하려면 file.flush() 다음에 os.fsync(file.fileno())을 사용하십시오.

2

이미 설명한 바와 같이 .flush() 메서드를 사용하여 버퍼에서 강제로 쓰기를 수행하지만 많은 호출을 사용하여 플러시를 사용하면 실제로 쓰기가 느려질 수 있습니다 (응용 프로그램이 고속 쓰기) 파일 시스템이 버퍼 크기보다 작은 변경을 작성하도록 강요하므로 무릎을 꿇을 수 있습니다. :)

관련 문제