parallel_hash.py en Python
Hashear cada archivo bajo un directorio con un pool de procesos.
"""Hashea cada archivo bajo un directorio con un pool de procesos."""
import hashlib
import sys
from concurrent.futures import ProcessPoolExecutor
from pathlib import Path
def sha256_de(ruta):
resumen = hashlib.sha256()
with open(ruta, "rb") as f:
while bloque := f.read(65536):
resumen.update(bloque)
return str(ruta), resumen.hexdigest()
def principal():
raiz = Path(sys.argv[1] if len(sys.argv) > 1 else ".")
archivos = [p for p in raiz.rglob("*") if p.is_file()]
if not archivos:
print("no se encontraron archivos")
return
with ProcessPoolExecutor() as pool:
for nombre, resumen in pool.map(sha256_de, archivos):
print(f"{resumen[:16]} {nombre}")
print(f"hasheó {len(archivos)} archivos")
if __name__ == "__main__":
principal()
Cómo funciona
rglobreúne los archivos por hashear.ProcessPoolExecutorreparte el hashing entre núcleos.- Cada archivo se lee por bloques y se digiere.
Palabras clave y builtins usados aquí
asdefelseforiflenopenprintreturnstrwhilewith
El intento, en números
- Líneas
- 29
- Caracteres a escribir
- 738
- Tokens
- 190
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 104 segundos.
Paso 2 de 2 en Bis; paso 53 de 53 en Python pythónico.