Сергей Куракин ([info]zaza) wrote,
@ 2008-06-02 23:01:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Когда-то я ругал коллегу за то, что тот неверно использует функцию 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)


[info]enc
2008-06-08 04:12 pm UTC (link)
premature optimization is the root of all evil ,)

(Reply to this) (Thread)


[info]zaza
2008-06-08 07:08 pm UTC (link)
It is not premature optimization, it is just testing and bug fixing.

(Reply to this) (Parent)


Create an Account
Forgot your login?
Login w/ OpenID
English • Español • Deutsch • Русский…