스택큐힙리스트

전체 파일을 읽으면 파일 핸들이 열린 상태로 유지됩니까? 본문

카테고리 없음

전체 파일을 읽으면 파일 핸들이 열린 상태로 유지됩니까?

스택큐힙리스트 2023. 4. 14. 03:30
반응형

만약 content = open('Path/to/file', 'r').read() 으로 전체 파일을 읽는다면 스크립트가 종료될 때까지 파일 핸들이 열린 상태로 남아 있습니까? 파일 전체를 읽는 더 간결한 방법은 있습니까?

답변 1

그 질문에 대한 답은 특정 Python 구현에 따라 약간 다를 수 있습니다.

이게 무슨 의미인지 이해하려면, 실제 file 객체에 특별히 주목해야 합니다. 코드에서는 그 객체가 식(expression) 안에서 단 한 번만 언급되고, read() 호출이 반환된 후에는 접근할 수 없게 됩니다.

이는 파일 개체가 쓰레기라는 것을 의미합니다. 유일하게 남은 질문은 쓰레기 수집기가 언제 파일 개체를 수집할 것인가?입니다.

CPython은 참조 카운터를 사용하여 이러한 종류의 가비지가 즉시 감지되어 즉시 수집됩니다. 이는 일반적으로 다른 Python 구현에서는 그렇지 않습니다.

파일이 닫혔는지 확인하기 위한 더 나은 해결책은 다음 패턴입니다:

with open('Path/to/file', 'r') as content_file:

content = content_file.read()

예외가 발생하더라도 블록이 끝나면 파일을 즉시 닫을 것입니다.

수정: 이해를 돕기 위해 더 자세히 말하자면:

with를 통한 자동 호출을 제외하고는, file.close()가 (즉, 직접 호출하지 않는 경우) 자동으로 호출되는 유일한 다른 방법은 file.__del__()를 통해입니다. 이것이 우리가 생각해야 할 __del__()이 호출되는 시점에 대한 질문을 불러일으킵니다.

올바르게 작성된 프로그램은 프로그램 종료 이전에 언제든지 종결자가 실행될 것이라고 가정해서는 안 됩니다.

-- # $$##&&$$&

특히:

객체는 명시적으로 파괴되지 않지만, 비접근 가능해지면 가비지 컬렉션될 수 있습니다. 구현은 가비지 컬렉션을 연기하거나 무시할 수 있습니다. 객체가 아직 접근 가능한 경우에 수집되는 객체가 없는 경우 구현 품질에 따라 어떻게 가비지 컬렉션이 구현되는지 결정됩니다.

[번역 불가: 요청하신 내용이 없습니다.]

CPython은 현재 순환 참조가 있는 쓰레기를 지연 감지하는 (선택적) 참조 계수 체계를 사용하며, 대부분의 객체가 도달할 수 없어지자마자 수집하지만, 순환 참조가 포함된 쓰레기를 수집할 수 없습니다.

번역할 수 없는 문자열입니다.

(강조는 제가 합니다)

하지만 이것은 시사하는 대로, 다른 구현들은 다른 동작을 할 수 있습니다. 예를 들어, PyPy has 6 different garbage collection implementations !

답변 2

파일 처리는 컴퓨터 프로그래밍에서 중요한 부분입니다. 파일의 내용을 읽거나 쓰는 것은 많은 응용 프로그램에서 필요한 것입니다. 하지만 파일 핸들을 열어놓으면 파일에 대한 접근을 계속 유지할 수 있습니다. 이러한 파일 핸들의 오래 열린 상태는 문제를 발생시키기도 합니다.

파일 핸들은 파일을 열어 접근하는 데 사용됩니다. 파일 핸들을 열어놓으면 프로그램이 파일에 대한 접근 권한을 가진 채 계속해서 정보를 읽거나 쓸 수 있습니다. 파일을 열린 상태에서 계속 유지하면 메모리 자원이 낭비됩니다. 또한, 다른 프로그램에서 파일에 접근할 수 없는 상황이 발생할 수도 있습니다.

따라서 파일 처리가 끝난 후에는 파일 핸들을 적절하게 닫아주어야 합니다. 파일 핸들을 닫으면 파일에 대한 접근 권한이 해제되기 때문에 다른 프로그램에서도 파일에 접근할 수 있게 됩니다. 파일 핸들을 열린 상태에서 계속 유지하면 메모리 자원이 낭비될 뿐만 아니라 파일 손상 등의 문제가 발생할 가능성도 있습니다.

컴퓨터 프로그래밍에서 파일 처리는 매우 중요한 부분입니다. 파일 핸들을 적절하게 열고 닫는 것은 파일 처리를 안정적으로 할 수 있는 방법 중 하나입니다. 파일 핸들을 열어놓고 유지하지 않도록 주의하여 안정적인 파일 처리를 할 수 있도록 노력해야 합니다.

반응형
Comments