문제

나는 항상 생각하는 파일 것이다면 누출되지 않고 닫히지만,나는 단지 검증하는 내가 입력하는 경우 다음과 같은 라인의 코드,파일을 닫습니다:

>>> 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은 참조 계산 외에도 쓰레기 수집을 가지고 있습니다.

최고 추측되기 때문에 파일 형식입장에서 입력,통역사 자체의 핸들을 닫는 파일에 쓰레기 컬렉션입니다.

또는,당신은 검사 후에는 파이썬은 종료되었고 모든"유출"파일 핸들을 닫습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top