Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 내부 버퍼를 플러시(flush)하는 방법 완벽 정리

파이썬의 파일 쓰기 버퍼링 이해하기

Python은 파일에 데이터를 쓸 때 내부적으로 버퍼링(buffering)을 수행합니다. 즉, file.write() 메서드가 호출되어도 데이터가 곧바로 하드 드라이브에 기록되는 것이 아니라, 일단 메모리상의 버퍼에 임시로 저장됩니다.

이러한 동작 방식의 주된 이유는 성능 때문입니다. 작은 데이터를 여러 번 나누어 쓰는 것보다 어느 정도 모아 놓고 한 번에 크게 쓰는 것이 훨씬 빠릅니다. 따라서 Python은 file.write()의 출력을 일정량이 쌓일 때까지 모았다가 한꺼번에 디스크에 기록함으로써 높은 쓰기 속도를 유지할 수 있습니다.

file.flush()로 버퍼 비우기

버퍼에 남아 있는 데이터를 그 순간 즉시 파일에 기록하려면 file.flush() 메서드를 사용하면 됩니다. 직접 작성한 내용을 파일에 확실히 반영하고 싶다면 아래와 같이 호출합니다:

with open("my_file.txt", "w+") as file:
    file.write("foo")
    file.write("bar")
    file.flush()

추가로 알아두면 좋은 사항

  • with 문 사용 시 자동 플러시: 위 예제처럼 with 문으로 파일을 열면 블록이 종료될 때 파일이 자동으로 닫히면서(close()) 버퍼도 함께 비워집니다. 따라서 대부분의 경우 명시적인 flush() 호출 없이도 데이터가 안전하게 저장됩니다.
  • os.fsync()로 물리적 저장 보장: flush()는 파이썬 내부 버퍼만 비울 뿐, 운영체제(OS) 수준의 버퍼까지 강제로 디스크에 기록하지는 않습니다. 전원 장애 등에도 데이터 유실을 완전히 막으려면 flush() 후에 os.fsync(file.fileno())를 함께 호출하는 것이 안전합니다.

정리하면, Python의 파일 쓰기 속도 향상을 위해 도입된 버퍼링 구조를 이해하고, 필요한 시점에 file.flush()를 활용하면 데이터 저장 타이밍을 세밀하게 제어할 수 있습니다.