[파이썬] 파일 객체의 버퍼링과 자동 플러싱

파일 객체의 버퍼링 모드는 세 가지가 있습니다:

  1. No buffering: open 함수의 buffering 인자를 0으로 설정하면 버퍼링을 하지 않습니다. 데이터를 쓸 때마다 바로 파일에 쓰기 작업이 발생합니다. 이 모드는 입출력 작업 비용이 크고 빈번한 경우에 적합합니다.
file = open("myfile.txt", "w", buffering=0)
file.write("Hello, world!")
file.close()
  1. Line buffering: open 함수의 buffering 인자를 1로 설정하면 줄 단위로 버퍼링을 수행합니다. 데이터가 줄 바꿈 문자로 끝날 때마다 파일에 쓰기 작업이 발생합니다. 이 모드는 텍스트 파일에서 한 줄씩 쓰기 작업이 발생하는 경우에 유용합니다.
file = open("myfile.txt", "w", buffering=1)
file.write("Hello, ")
file.write("world!\n")
file.close()
  1. Full buffering: open 함수의 buffering 인자를 크기(바이트)로 설정하면 해당 크기만큼의 버퍼를 사용하여 파일에 쓰기 작업을 수행합니다. 버퍼가 가득 차거나 파일을 닫을 때마다 파일에 데이터를 쓰기 작업을 발생시킵니다. 이 모드는 입출력 작업이 빈번하지 않은 경우에 효율적입니다.
file = open("myfile.txt", "w", buffering=4096)
file.write("Hello, world!")
file.close()

파일 객체의 기본 버퍼링 모드는 시스템에 따라 달라질 수 있으며, open 함수를 호출할 때 buffering 인자를 명시적으로 설정하지 않으면 시스템의 기본 값이 사용됩니다.

또한, 파일 객체를 자동으로 플러싱하도록 설정할 수도 있습니다. 파일 객체의 flush 메소드를 호출하면 버퍼에 있는 데이터를 파일에 쓰기 작업을 수행합니다. 애플리케이션을 종료하기 전이나 중간에 특정 지점에서 버퍼를 비우고 데이터를 파일에 쓰고자 할 때 유용합니다.

file = open("myfile.txt", "w")
file.write("Hello, world!")
file.flush()  # 버퍼를 비워서 파일에 데이터가 쓰이도록 함
file.close()

파일 객체의 버퍼링과 자동 플러싱은 입출력 성능 및 작업 순서에 영향을 미치므로, 어떤 모드를 사용해야 하는지 신중히 결정해야 합니다. 프로그램의 요구 사항에 맞게 버퍼링과 플러싱을 설정하여 최적의 성능을 얻을 수 있습니다.