Warum nicht einfach Benchmarks?
>>> 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
So auf meiner Maschine ist hash512
doppelt so langsam wie sha1
. Aber wie GregS sagte, warum würden Sie Secure Hash für Caching verwenden? Versuchen Sie, die eingebauten Hash-Algorithmen, die wirklich schnell sein sollten und abgestimmt:
>>> s = "asdf"
>>> hash(s)
-618826466
>>> s = "xxx"
>>> hash(s)
943435
>>> hash("xxx")
943435
Oder noch besser, verwenden Sie den eingebauten Python Wörterbücher. Vielleicht können Sie uns mehr darüber erzählen, was Sie beim Caching vorhaben.
EDIT: Ich denke, dass Sie so etwas zu erreichen versuchen:
hash = hashlib.sha1(object_to_cache_as_string).hexdigest()
cache[hash] = object_to_cache
Was ich refferring durch „den eingebauten Python dictinoaries verwendet“ ist, dass Sie die oben vereinfachen :
cache[object_to_cache_as_string] = object_to_cache
Auf diese Weise kümmert sich Python um das Hashing, also müssen Sie nicht!
In Bezug auf Ihr spezielles Problem können Sie sich auf Python hashable dicts beziehen, um ein Wörterbuch hashbar zu machen. Dann alles, was Sie brauchen würden, zu tun, um das Objekt zu cachen ist:
cache[object_to_cache] = object_to_cache
Wenn es für Caching ist, warum benötigen Sie einen sicheren Hash? –
Wenn Sie die verschiedenen Methoden ausprobiert und ihre Leistung gemessen haben, was haben Sie gefunden? –
Was @GregHewgill wahrscheinlich zu sagen hat, ist, dass es ein praktisches Standard-Bibliotheksmodul 'timeit' gibt, das solche Messungen so trivial macht, dass es einfacher ist, Zeit zu nehmen, als danach zu fragen, besonders wenn es von der Kommandozeile aus ausgeführt wird. –