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()