MarioDebian, mi devlog

Bitácora de un desarrollador newbie.

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.


Articulos relacionados:

Comentarios

  1. 17/01/2009 | 11:14

    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.

  2. noalwin Pues a mi no me pasa
    17/01/2009 | 11:16

    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

  3. 17/01/2009 | 13:52

    @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

  4. luciano chicos
    17/01/2009 | 19:09

    y con archivos de pocos kbytes también pasa?

Comentarios cerrados