본문 바로가기
카테고리 없음

파이썬 입출력 버퍼 제어: flush 기능 알아보기

by 뷰티풀스택 2023. 7. 11.
반응형

Keyword: flush

 

flush는 버퍼에 있는 모든 데이터를 출력 대상으로 보내는 기능을 수행하는 키워드입니다. 

 

파이썬에서 출력 작업은 기본적으로 버퍼링되어 출력 대상으로 보내지기 전에 일정량의 데이터가 모일 때까지 대기하는데, 이 때 flush를 사용하면 버퍼에 있는 모든 데이터를 즉시 출력 대상으로 전송할 수 있습니다. 즉, flush가 호출되면 출력 대상으로 즉시 내용이 전송되어 버퍼를 비울 수 있습니다.

 

flush는 특히 중요한 작업이나 로그 기록 시 사용됩니다. 예를 들어, 프로그램에서 오류가 발생하여 중단되는 경우에는 중단 이전에 버퍼에 있는 모든 로그를 출력 대상으로 내보내기 위해 flush를 사용할 수 있습니다.

 

아래는 flush를 사용하는 간단한 예제 코드입니다.

 

```python

import time

 

def generate_data():

    # 데이터를 생성하는 함수로 가정

    return "Generated data"

 

def save_data(data):

    # 데이터를 저장하는 함수로 가정

    print(f"Saving data: {data}")

    time.sleep(1)  # 시간이 오래 걸리는 작업을 가정

    print("Data saved!")

 

data = generate_data()  # 데이터 생성

save_data(data)  # 데이터 저장

print("Program finished!")

```

 

위 예제에서는 `save_data` 함수에 `print` 함수가 있어 데이터를 저장하기 위한 메시지가 출력됩니다. 하지만 실제로는 이 메시지들은 버퍼에 저장되어 출력 대상에 전송되기 전까지 대기하게 됩니다. 그래서 "Program finished!" 메시지가 먼저 출력되고, 그 이후에 "Saving data: Generated data"와 "Data saved!" 메시지가 출력됩니다.

 

이때 `save_data` 함수에서 `print` 함수 호출 전에 `flush`를 사용하면 버퍼에 있는 내용을 즉시 출력 대상으로 전송할 수 있습니다. 아래는 수정된 코드입니다.

 

```python

import time

 

def generate_data():

    # 데이터를 생성하는 함수로 가정

    return "Generated data"

 

def save_data(data):

    # 데이터를 저장하는 함수로 가정

    print(f"Saving data: {data}", flush=True)  # flush=True 옵션 사용

    time.sleep(1)  # 시간이 오래 걸리는 작업을 가정

    print("Data saved!", flush=True)  # flush=True 옵션 사용

 

data = generate_data()  # 데이터 생성

save_data(data)  # 데이터 저장

print("Program finished!")

```

 

이제 `print` 함수 호출 시에 `flush=True` 옵션을 추가하여 버퍼에 있는 내용을 즉시 전송합니다. 따라서 "Saving data: Generated data"와 "Data saved!" 메시지는 "Program finished!" 메시지보다 먼저 출력됩니다.

 

더 자세한 내용은 파이썬 공식 문서를 참고하세요: [파이썬 공식 문서 - print 함수](https://docs.python.org/ko/3/library/functions.html#print)

반응형

댓글