Perché non limitarlo al benchmark?
>>> 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
Quindi sulla mia macchina, hash512
è due volte più lento come sha1
. Ma come ha detto GregS, perché dovresti usare un hash sicuro per il caching? Provate gli algoritmi di hash incorporate che dovrebbero essere veramente veloce e messo a punto:
>>> s = "asdf"
>>> hash(s)
-618826466
>>> s = "xxx"
>>> hash(s)
943435
>>> hash("xxx")
943435
O meglio ancora, utilizzare i dizionari Python builtin. Forse puoi dirci di più su cosa pensi di fare il caching.
EDIT: sto pensando che si sta cercando di realizzare qualcosa di simile a questo:
hash = hashlib.sha1(object_to_cache_as_string).hexdigest()
cache[hash] = object_to_cache
Quello che stavo refferring a da "utilizzare i dictinoaries Python builtin" è che si può semplificare il sopra :
cache[object_to_cache_as_string] = object_to_cache
In questo modo, Python si occupa dell'hashing in modo da non doverlo fare!
Per quanto riguarda il problema specifico, è possibile fare riferimento a Python hashable dicts per rendere un dizionario lavabile. Poi, tutto quello che avresti bisogno di fare per memorizzare nella cache l'oggetto è:
cache[object_to_cache] = object_to_cache
Se è per il caching, perché è necessario un hash sicuro? –
Quando hai provato i diversi metodi e misurato le loro prestazioni, che cosa hai trovato? –
Ciò che probabilmente intendeva dire @GregHewgill è che esiste un comodo 'timeit' del modulo di libreria standard che rende tali misurazioni così banali che è più semplice dedicare solo il tempo che chiedere, specialmente quando viene eseguito dalla riga di comando. –