Сергей Куракин ([info]zaza) wrote,
Когда-то я ругал коллегу за то, что тот неверно использует функцию md5. Сегодня в Python я наткнулся на похожие грабли. Так как у меня Python 2.4, я пользую их модуль md5, и там нет специального метода, для работы с файлами. Я, понадеявшись на разумность разработчиков сделал всё тривилаьно:
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()

Работает куда быстрее, чем первый, результат идентичный.

  • Post a new comment

    Error

    Your IP address will be recorded 

  • 1 comments

Deleted comment

[info]zaza

June 8 2008, 19:08:18 UTC 3 years ago

It is not premature optimization, it is just testing and bug fixing.
Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…