이전 질문 과 관련 하여 open()
함수 를 사용한 두 가지 답변 모두 파일을 닫는 것에 대한 언급이 없다는 것을 알았습니다 .
나는 그것을하는 것이 좋은 습관이라는 것을 읽었지만 실제로 그것을 필요로합니까? 불필요한 코드입니까?
파일이 자동으로 닫히나요?
python3
, 파일은 더 이상 참조가 없습니다되면 자동으로 garbaged됩니다.
이전 질문 과 관련 하여 open()
함수 를 사용한 두 가지 답변 모두 파일을 닫는 것에 대한 언급이 없다는 것을 알았습니다 .
나는 그것을하는 것이 좋은 습관이라는 것을 읽었지만 실제로 그것을 필요로합니까? 불필요한 코드입니까?
파일이 자동으로 닫히나요?
python3
, 파일은 더 이상 참조가 없습니다되면 자동으로 garbaged됩니다.
답변:
파일은 언제 닫히나요?
우리가 배울 수있는 것처럼 명시 적으로 파일을 닫는 것이 중요합니까? (StackOverflow) , Python 인터프리터는 다음과 같은 경우 파일을 닫습니다.
close()
메소드 를 수동으로 호출 할 수 있습니다 . 이것은 물론 모든 파이썬 구현에서 항상 작동합니다.file
with open(...):
file
개체의 마지막 참조가 제거되었다 따라서 객체는 가비지 콜렉터에 의해 처리됩니다. 이것은 언어 기능이 아니라 CPython 구현의 특별한 기능이므로 이식성을 위해 이것에 의존하지 마십시오!따라서 첫 번째 (수동) 방법 만 신뢰할 수 있습니다!
파일이 열린 상태로 유지되면 어떻게됩니까?
먼저, 파이썬 인터프리터의 구현에 따라, 쓰기 액세스 권한이있는 파일을 연 경우 수동으로 유도하거나 파일 핸들러가 닫힐 때까지 수정 사항이 디스크로 플러시되는지 확신 할 수 없습니다.
둘째, 사용자 당 시스템에서 제한된 수의 파일 만 열 수 있습니다. 예를 들어 파이썬 프로그램에서 많은 파일을 가능한 빨리 닫지 않고 루프에서 열어서이 제한을 초과하면 시스템이 더 많은 파일 핸들을 열지 못하게되어 예외가 발생합니다. 프로그램이 마지막으로 허용 된 열린 파일을 가져 오면 다른 프로그램이 거부되어 실패 할 수도 있습니다.
셋째, 이동식 장치에서 파일을 열면 마운트가 해제되거나 꺼내지지 않습니다. 당신은 여전히 같은 일부 파일 시스템에서 파일을 삭제할 수 있습니다 ext4
단순히 파일의 아이 노드에 파일 기술자 / 하드 링크가 연결되지 않은 / 제거됩니다 있지만 파일을 연 프로그램은 여전히 자신의 임시 파일 핸들러를 통해 아이 노드에 액세스 할 수 있습니다. 예를 들어, 해당 소프트웨어가 실행되는 동안 패키지를 업데이트 할 수있는 메커니즘이기도합니다. 그러나 예를 들어 NTFS에는 그러한 기능이 없습니다. 그러나 두 개의 동시 프로세스로 수정되지 않을 수도 있으므로 다른 프로세스에서는 여전히 차단됩니다.
python3
더 이상 존재하지 않으며 답변은 구식입니다. 자동 가비지 콜렉션은 이유로 존재하며 완벽하게 작동합니다. 제가 구체적으로 사용한 지 몇 년 이 지났 습니다close()
. 결코 이제까지 그것을 사용하지 않음으로써 발생하는 하나의 오류로 실행되지 않습니다.
with open (file_name, ...) as variable:
close()
이 코드 블록을 떠나 자마자 자동으로 메소드를 호출합니다 .