Hashlib : 청크의 최적 크기 md5.update에 사용하는()
참조에
.update()는 성능을 향상시킵니다.
내가 수행 한 모든 테스트는 작은 덩어리를 사용하면 최상의 성능을 제공하는 것으로 나타납니다.
다음 코드를 고려하십시오
def test(factor):
filehash = hashlib.md5()
blk_size_to_read = filehash.block_size * (2**factor)
with open(largetestfile, 'rb') as f:
read_data = f.read(blk_size_to_read)
filehash.update(read_data)
filehash.digest()
if __name__ == '__main__':
for ctr in xrange(0, 12):
funcstr = "test({})".format(str(ctr))
timetaken = timeit.timeit(funcstr, setup="from __main__ import test", number = 5000)
print "Factor: {} Time: {}".format(str(ctr), str(timetaken))
내가했던 모든 테스트는 factor
0 또는 1을 사용할 때 최적의 성능 (즉, 64 또는 128 바이트) 달성을 나타냅니다.
인용 된 질문에 표시된 결과와 다른 결과가 나타나는 이유는 무엇입니까?
나는 7백메가바이트에서 1.2GB에 이르기까지 다양한 크기의 바이너리 및 일반 텍스트 파일을 시도하고 우분투 12.04에 파이썬 2.7.3 사용하고
차 질문 : 나는 그것이 있어야하는 방법을 timeit 사용하고?
호기심 때문에 최적의 청크 크기를 찾았습니까? – 2rs2ts
청크 크기가 커질수록 성능은 md5 코드를 실행하는 시스템의 이론적 인 최대 속도를 향하여 점차 증가합니다. 당신이 1MiB를 버퍼링 할 무렵에는 속도의 증가가 오래 전부터 부적절 해졌습니다. 임의의 버퍼 크기를 선택하려면 128k를 제안하십시오. 이것은 모든 해시 함수에 해당됩니다. – gps
@ 2rs2ts 최적의 크기는 65536 바이트입니다. 위의 내 대답에 대한 업데이트를 참조하십시오. – Verma