2014-07-22 2 views
0

CPython에서 참조 카운터가 0으로 떨어지는 경우 객체 공간은 바로 파일을 닫는 것이 얼마나 중요합니까? 나는 f이 파일 객체이고 나는 f = 10을 수행하면 파일 객체 공간이 자동으로 교정되어 close가 호출된다는 것을 의미한다.CPython에서 파일 닫기

+1

는 내부 기록 버퍼를 플러시한다. 파일을 닫아 암시 적으로 버퍼를 플러시하지 않으면 동일한 파일에서 읽고 쓸 때 경쟁 조건을 실행할 수 있습니다. 일반적으로 CPython 구현 세부 사항에 의존하지 않는 것이 좋습니다. 필자는 종종 CPython과 PyPy 사이를 전환하기 때문에 모든 Python 구현이 구현하는 것에 충실하는 것이 낫습니다. – Blender

+0

참조 횟수가 0이되는 즉시 개체가 가비지 수집됩니다. – chepner

+0

@chepner Cpython에서는 그렇게합니다. – zer0uno

답변

1

CPython은 참조 횟수를 기반으로 개체 메모리 교정을 처리 할 수 ​​있지만 더 이상 필요없는 즉시 파일과 같은 외부 리소스를 해제하는 것이 좋습니다. 당신이 파일을 완료하면

https://docs.python.org/2/tutorial/inputoutput.html

""에서 추출 " , f.close()를 호출 F를 호출 한 후. 열린 파일에 의해 촬영 시스템 자원을 닫습니다 최대 무료입니다. 가까이(), 자동으로 실패합니다 파일 객체를 사용하려고 시도합니다.

>>> 
>>> f.close() 
>>> f.read() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in ? 
ValueError: I/O operation on closed file 

그것은 파일 객체를 처리 할 때 키워드로를 사용하는 것이 좋습니다입니다.이 파일이 제대로 자사의 제품군이 완료된 후 폐쇄되는 장점이있다 도중에 예외가 발생하더라도 예외는 아니며 같은 try-fin을 작성하는 것보다 훨씬 짧습니다. 아군 블록 : 파일이 닫히면

>>> 
>>> with open('workfile', 'r') as f: 
...  read_data = f.read() 
>>> f.closed 
True 

이 "" "