Почему бы просто не провести сравнительный анализ?
>>> def sha1(s):
... return hashlib.sha1(s).hexdigest()
...
>>> def sha512(s):
... return hashlib.sha512(s).hexdigest()
...
>>> t1 = timeit.Timer("sha1('asdf' * 100)", "from __main__ import sha1")
>>> t512 = timeit.Timer("sha512('asdf' * 100)", "from __main__ import sha512")
>>> t1.timeit()
3.2463729381561279
>>> t512.timeit()
6.5079669952392578
Итак, на моей машине hash512
в два раза медленнее, чем sha1
. Но, как сказал GregS, зачем вам использовать безопасный хеш для кеширования? Попробуйте встроенные алгоритмы хеширования, которые должны быть очень быстрыми и настраиваемыми:
>>> s = "asdf"
>>> hash(s)
-618826466
>>> s = "xxx"
>>> hash(s)
943435
>>> hash("xxx")
943435
А еще лучше использовать встроенные словари Python. Может быть, вы расскажете нам больше о том, что планируете кэшировать.
РЕДАКТИРОВАТЬ: Я думаю, что вы пытаетесь добиться чего-то вроде этого:
hash = hashlib.sha1(object_to_cache_as_string).hexdigest()
cache[hash] = object_to_cache
Под «использованием встроенных словарей Python» я имел в виду то, что вы можете упростить приведенное выше:
cache[object_to_cache_as_string] = object_to_cache
Таким образом, Python позаботится о хешировании, поэтому вам не придется этого делать!
Что касается вашей конкретной проблемы, вы можете обратиться к хешируемым словарям Python, чтобы сделать хешируемый словарь. Затем все, что вам нужно сделать для кеширования объекта, это:
cache[object_to_cache] = object_to_cache
ИЗМЕНИТЬ - Заметки о Python3
Python 3.3 вводит рандомизацию хэшей, что означает, что вычисленные хэши могут отличаться в разных процессах, поэтому вы не должны полагаться на вычисленный хэш, если не установите для переменной среды PYTHONHASHSEED
значение 0.
Ссылки: - https://docs.python.org/3/reference /datamodel.html#object.<▪hash - https://docs.python.org/3/using/cmdline.html#envvar-PYTHONHASHSEED
person
sttwister
schedule
10.02.2010
timeit
, который делает такие измерения настолько тривиальными, что проще просто рассчитать время, чем спрашивать об этом, особенно когда он запускается из командной строки. - person Peter Hansen   schedule 11.02.2010