| Сергей Куракин ( @ 2008-06-02 23:01:00 |
Когда-то я ругал коллегу за то, что тот неверно использует функцию md5. Сегодня в Python я наткнулся на похожие грабли. Так как у меня Python 2.4, я пользую их модуль md5, и там нет специального метода, для работы с файлами. Я, понадеявшись на разумность разработчиков сделал всё тривилаьно:
И тут у меня вдруг, неожиданно выкинуло MemoryError. Причём совсем неожиданно, когда я уже как-бы отгонял всё на рабочих компах. Дома, где кол-во памяти не привышает 512 МБ, а размер файла больше 1024 МБ. Кстати хороший тест провёл, повезло.
Чтож, нашёл и обход:
Работает куда быстрее, чем первый, результат идентичный.
md5.new(file(fileName ,'rb').read()).hexdigest()
И тут у меня вдруг, неожиданно выкинуло MemoryError. Причём совсем неожиданно, когда я уже как-бы отгонял всё на рабочих компах. Дома, где кол-во памяти не привышает 512 МБ, а размер файла больше 1024 МБ. Кстати хороший тест провёл, повезло.
Чтож, нашёл и обход:
fobj = file(fileName, 'rb') m = md5.new() while True: d = fobj.read(1024) if not d: break m.update(d) m.hexdigest()
Работает куда быстрее, чем первый, результат идентичный.