Enero
2009
Mí no entender
Esto es muy curioso:
$ time sha512sum debian-testing-amd64-netinst.iso
0d4527ef57a43f070fd09eb0e5fe7e893be7f404d3aedb06a8b\
ac1666422e6e194b2cba13167033464146718adce77b5b75c\
9d276a2c344a62fbe25b883977af debian-testing-amd64-netinst.iso
real 0m8.273s
user 0m7.648s
sys 0m0.532s
$ time sha512.py debian-testing-amd64-netinst.iso
0d4527ef57a43f070fd09eb0e5fe7e893be7f404d3aedb06a8b\
ac1666422e6e194b2cba13167033464146718adce77b5b75c\
9d276a2c344a62fbe25b883977af debian-testing-amd64-netinst.iso
real 0m1.731s
user 0m1.428s
sys 0m0.292s
Este es sha512.py:
#!/usr/bin/env python import sys import hashlib f=open(sys.argv[1], 'rb') data=f.read() f.close() print "%s %s" %(hashlib.sha512(data).hexdigest(), sys.argv[1])
No es fruto del cacheado ni el azar,tengo un script que mide varias ejecuciones (en modo alterno) y en python es casi 5 veces más rápido.
Ten en cuenta que la librería standard de python en su mayoría está implementada en C, con lo cual no debería diferir mucho respecto a proceso que lanzas antes que me imagino que será C (tal vez la carga de la vm de python y el compilado, pero es insignificante).
Lo más probable sea la forma de leer el ISO. En el segundo caso te estás cargando en memoria todo el iso ya que así lo especifica read.
Pues a mi no me pasa
$ time sha512sum 3/dsl-3.2.iso
4ec4852f7e65ba02733e1d3599b259eb9afbda6457e95414baadb48d716ab4604f117dbcfe8200d0b09cbb9a7eaf2e57f0f4c465ebc6af173845fd345f7aa063 3/dsl-3.2.iso
real 0m7.691s
user 0m6.553s
sys 0m0.203s
$ time ./sha512.py 3/dsl-3.2.iso
4ec4852f7e65ba02733e1d3599b259eb9afbda6457e95414baadb48d716ab4604f117dbcfe8200d0b09cbb9a7eaf2e57f0f4c465ebc6af173845fd345f7aa063 3/dsl-3.2.iso
real 0m7.145s
user 0m5.906s
sys 0m0.407s
$ time sha512sum 3/dsl-3.2.iso
4ec4852f7e65ba02733e1d3599b259eb9afbda6457e95414baadb48d716ab4604f117dbcfe8200d0b09cbb9a7eaf2e57f0f4c465ebc6af173845fd345f7aa063 3/dsl-3.2.iso
real 0m7.988s
user 0m6.590s
sys 0m0.227s
$ time ./sha512.py 3/dsl-3.2.iso
4ec4852f7e65ba02733e1d3599b259eb9afbda6457e95414baadb48d716ab4604f117dbcfe8200d0b09cbb9a7eaf2e57f0f4c465ebc6af173845fd345f7aa063 3/dsl-3.2.iso
real 0m7.298s
user 0m5.843s
sys 0m0.413s
$ time sha512sum 3/dsl-3.2.iso
4ec4852f7e65ba02733e1d3599b259eb9afbda6457e95414baadb48d716ab4604f117dbcfe8200d0b09cbb9a7eaf2e57f0f4c465ebc6af173845fd345f7aa063 3/dsl-3.2.iso
real 0m7.796s
user 0m6.563s
sys 0m0.177s
$ time ./sha512.py 3/dsl-3.2.iso
4ec4852f7e65ba02733e1d3599b259eb9afbda6457e95414baadb48d716ab4604f117dbcfe8200d0b09cbb9a7eaf2e57f0f4c465ebc6af173845fd345f7aa063 3/dsl-3.2.iso
real 0m7.212s
user 0m5.953s
sys 0m0.423s
@javi: el impacto de consumo de memoria es peor en mi script python, con archivos grandes no sería buen método, pero con 150 MiB o menos, es bastante más rápido...
@noalwin: el archivo es de 132 MiB, con archivos más pequeños o más grandes los resultados pueden ser bastante distintos, de hecho con la ISO de Ubuntu 8.04 los resultados son aún más bestias:
* sha512sum
real 3m59.136s
user 0m42.783s
sys 0m1.332s
* sha512.py
real 0m46.697s
user 0m7.768s
sys 0m1.188s
y con archivos de pocos kbytes también pasa?