어떻게 python 파일을 닫는 gc'ed?
-
05-09-2019 - |
문제
나는 항상 생각하는 파일 것이다면 누출되지 않고 닫히지만,나는 단지 검증하는 내가 입력하는 경우 다음과 같은 라인의 코드,파일을 닫습니다:
>>> f = open('somefile.txt')
>>> del f
그 밖의 투명한 호기심,어떻게 작동하나요?내가 주는 파일이 포함되어 있지 않은 __
del__
방법입니다.
해결책
CPYTHON에서는 적어도 파일 객체가 처리 될 때 파일이 닫힙니다. 참조 file_dealloc
기능 Objects/fileobject.c
Cpython 소스에서. 거래 방법은 일종의 것과 같습니다 __del__
내재 된 일부 문제가없는 경우를 제외하고 C 유형의 경우 __del__
.
다른 팁
따라서 ~와 함께 성명.
Python 2.5의 경우 사용하십시오
from __future__ import with_statement
(Python 2.6 또는 3.x의 경우 아무것도하지 않습니다)
with open( "someFile", "rU" ) as aFile:
# process the file
pass
# At this point, the file was closed by the with statement.
# Bonus, it's also out of scope of the with statement,
# and eligible for GC.
Python은 쓰레기 수집 외에도 참조 계산 및 결정 론적 파괴를 사용합니다. 객체에 대한 더 이상 참조가 없으면 객체가 즉시 릴리스됩니다. 파일을 출시하면 닫힙니다.
이것은 비 결정적 쓰레기 수집 만있는 예를 들어 Java와 다릅니다. 즉, 객체가 언제 출시 될지 알고 있으므로 파일을 수동으로 닫아야합니다.
참조 계산은 완벽하지 않습니다. Progam에서 도달 할 수없는 원형 참조가있는 객체를 가질 수 있습니다. 그렇기 때문에 Python은 참조 계산 외에도 쓰레기 수집을 가지고 있습니다.
최고 추측되기 때문에 파일 형식입장에서 입력,통역사 자체의 핸들을 닫는 파일에 쓰레기 컬렉션입니다.
또는,당신은 검사 후에는 파이썬은 종료되었고 모든"유출"파일 핸들을 닫습니다.