파이썬의 파일 버퍼링에 대한 흥미로운 경험이 있었고 올바르게 이해하고 있다는 것을 알고 싶었습니다. 을 감안할 때변수 버퍼를 사용하여 파이썬에서 플러시하고 닫는 파일 버퍼
[파이썬 2.7 쉘]
...
model = (really big Numpy model)
f = open('file.out','w')
pickle.dump(model, f)
(pickle.dump() finishes while I'm doing other things)
[배쉬 쉘]
$ ls -l
-rw-r--r-- 1 john staff 270655488 Dec 6 21:32 file.out
[반품 파이썬 쉘]
model = (different really big Numpy model)
f = open('newfile.out','w')
pickle.dump(model,f)
(pickle.dump() finishes)
[배쉬 쉘]
$ ls -l
-rw-r--r-- 1 john staff 270659455 Dec 7 07:09 file.out
-rw-r--r-- 1 john staff 270659451 Dec 6 20:48 newfile.out
참고 file.out은 이제 다른 크기입니다.
이제 파이썬의 파일 버퍼가 시스템 크기 (기본적으로 Mac OSX)로 설정되어 있다는 것을 알고 있습니다. 따라서 파일 버퍼에 파일 버퍼가 3,667 바이트로 남아있는 것 같습니다. Mac OSX 파일 버퍼가 그보다 큽니다.
나는 f.close()를 호출하지 않고 파일 객체 'f'를 다른 열린 파일에 강제로 재 할당했다는 사실에 관심이 많았다. (솔직히 다른 것을 시험해보고 깜빡했다.) 파일 크기를 보았을 때, 나는 똑같이 유지 될 것이라고 기대했다. (결과물을 자르는 것을 의미 할 수도있다.)
그래서 이것은 안전한 절차인지의 여부이다. 파일 객체 할당이 파이썬 가비지 컬렉터 또는 파일 객체 자체가 버퍼를 비우고 close() 메소드를 호출하지 않아도 갑작스러운 변수 재 할당을 통해 파일을 닫는 방식으로 래핑됩니까? ? 더욱 중요한 것은 이 항상이거나, 실제로 변수 할당이 이 아니면 이 될 수도 있습니다. - 파일 버퍼가 플러시되기 전에 해당 버퍼가 잘릴 수 있습니다.
파일 개체와 파이썬 가비지 컬렉터가 적절하게 파괴되지 않은 채로 객체를 잡아 당기는 것이 얼마나 우아하고 안전한 지 궁금합니다.
감사합니다, 스벤, 내가 생각한 것입니다. 방금 확인을 원했어. 파이썬의 가비지 컬렉터를 좋아하셔야합니다. 시간이 지나치게 부피가 크지 만 너무 빨리 타이핑하는 바보 같은 사람을 잡으면 달콤한 맛! – JohnMetta