Я сделаю все возможное, чтобы объяснить мою проблему и мой взгляд на то, как, по моему мнению, я могу ее решить.
Я использую этот код
for root, dirs, files in os.walk(downloaddir):
for infile in files:
f = open(os.path.join(root,infile),'rb')
filehash = hashlib.md5()
while True:
data = f.read(10240)
if len(data) == 0:
break
filehash.update(data)
print "FILENAME: " , infile
print "FILE HASH: " , filehash.hexdigest()
и используя start = time.time () elapsed = time.time () - start я измеряю, сколько времени потребуется для вычисления хеша. Указывая мой код в файл с 653 мегабайтами, это результат:
root@Mars:/home/tiago# python algorithm-timer.py
FILENAME: freebsd.iso
FILE HASH: ace0afedfa7c6e0ad12c77b6652b02ab
12.624
root@Mars:/home/tiago# python algorithm-timer.py
FILENAME: freebsd.iso
FILE HASH: ace0afedfa7c6e0ad12c77b6652b02ab
12.373
root@Mars:/home/tiago# python algorithm-timer.py
FILENAME: freebsd.iso
FILE HASH: ace0afedfa7c6e0ad12c77b6652b02ab
12.540
Хорошо, теперь 12 секунд + - для файла размером 653 МБ моя проблема в том, что я собираюсь использовать этот код в программе, которая будет работать с несколькими файлами, некоторые из них могут быть 4/5/6 ГБ, и это займет гораздо больше времени вычислить. Интересно, есть ли для меня более быстрый способ вычислить хеш файла? Может быть, занимаясь многопоточностью? Я использовал другой скрипт, чтобы проверять использование процессора по секундам, и я вижу, что мой код использует только 1 из моих 2 процессоров и только при 25% макс. Как-нибудь я могу это изменить?
Заранее всем спасибо за предоставленную помощь.