from argparse import ArgumentParser
from glob import glob
from multiprocessing import Pool
import subprocess
import tqdm 

def parse_args():
    parser = ArgumentParser("Compresses files given a pattern in parallel")
    parser.add_argument("pattern")
    parser.add_argument("n_proc", type=int)
    return parser.parse_args()


def compress_single(fname):
    #print("Compressing...", fname)
    result = subprocess.run(f"xz -T4 --fast -v {fname}", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    if result.returncode != 0:
        raise Exception(result.stderr)

def main():
    args = parse_args()
    glob_pattern = args.pattern
    n_processes = args.n_proc

    file_list = glob(glob_pattern, recursive=True)
    with Pool(n_processes) as p:
        for _ in tqdm.tqdm(p.imap_unordered(compress_single, file_list), total=len(file_list)):
            pass

if __name__ == "__main__":
    main()
