문제
많은 모듈을 사용하여 전체 파일을 메모리로 가져 오거나 처리하는 동안 파일 내용물을 세면합니다. 이런 종류의 로딩 진행 상황을 추적 할 방법이 있는지 궁금합니다. 콜백을하는 래퍼 클래스 일 수 있습니까?
해결책
파일의 크기를 결정한 다음 총계를 읽은 바이트 수로 나누어서이를 수행합니다. 이와 같이:
import os
def show_progress(file_name, chunk_size=1024):
fh = open(file_name, "r")
total_size = os.path.getsize(file_name)
total_read = 0
while True:
chunk = fh.read(chunk_size)
if not chunk:
fh.close()
break
total_read += len(chunk)
print "Progress: %s percent" % (total_read/total_size)
yield chunk
for chunk in show_progress("my_file.txt"):
# Process the chunk
pass
편집하다: 나는 그것이 최고의 코드가 아니라는 것을 알고 있지만 개념을 보여주고 싶었습니다.
다른 팁
실제로 "가져 오기"( "읽기"가 아님)를 의미하는 경우 가져 오기 모듈 정의를 무시할 수 있습니다. 타이밍 기능을 추가 할 수 있습니다.
참조 꼬마 도깨비 기준 치수.
"읽기"라는 의미가 있으면 파일 같은 파일 모양의 래퍼로 파이썬 파일을 사소하게 포장 할 수 있습니다. 파일은 너무 많은 방법을 노출하지 않습니다. 흥미로운 것들을 무시하여 타이밍 데이터를 얻을 수 있습니다.
>>> class MyFile(file):
... def read(self,*args,**kw):
... # start timing
... result= super(MyFile,self).read(*args,**kw)
... # finish timing
... return result
제휴하지 않습니다 StackOverflow