from pathlib import Path import re import shlex import subprocess import threading import queue import sys to_p = Path("svg2png") to_p.mkdir(exist_ok=True) for f in to_p.glob("*.png"): f.unlink() images = [ f for f in Path("_build/html/_images/").glob("*.svg") if not re.match(r"^seg[0-9A-F]{2}$", f.stem) ] q = queue.Queue() def worker(): while True: item = q.get() if item is None: break to = to_p / item.with_suffix(".png").name args = [ "inkscape", "-z", "-e", str(to.absolute()), "-w", "800", "-background", "white", str(item.absolute()), ] print("Running: {}".format(" ".join(shlex.quote(x) for x in args))) proc = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) if b"Bitmap saved as" not in proc.stdout: print("Error!") print(proc.stdout) sys.exit(1) q.task_done() NUM_THREADS = 8 threads = [] for i in range(NUM_THREADS): t = threading.Thread(target=worker) t.start() threads.append(t) for img in sorted(images): q.put(img) q.join() for i in range(NUM_THREADS): q.put(None) for t in threads: t.join()