typestar

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

  1. rglob reúne los archivos por hashear.
  2. ProcessPoolExecutor reparte el hashing entre núcleos.
  3. Cada archivo se lee por bloques y se digiere.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 2 de 2 en Bis; paso 53 de 53 en Python pythónico.

← Anterior