I’m converting a bunch of SVG images to PNG using inkscape.
Single threaded:
<code> # my loop that generates SVG code
process = subprocess.run([inkscape_path, '-p', '-o', filename],input=svg_bytes)
</code>
<code> # my loop that generates SVG code
process = subprocess.run([inkscape_path, '-p', '-o', filename],input=svg_bytes)
</code>
# my loop that generates SVG code
process = subprocess.run([inkscape_path, '-p', '-o', filename],input=svg_bytes)
This works and takes 85 seconds in total for 30 images.
If I try it with communicate() it waits for completion for each process. So I set timeout to 0 and ignore the raised exception.
<code>processes = []
# my loop that generates SVG code
process = subprocess.Popen([inkscape_path, '-p', '-o', filename],stdin= subprocess.PIPE, env=dict(os.environ, SELF_CALL="xxx") )
try:
process.communicate(svg_bytes,timeout=0)
except:
pass
processes.append(process)
for p in processes:
p.wait()
</code>
<code>processes = []
# my loop that generates SVG code
process = subprocess.Popen([inkscape_path, '-p', '-o', filename],stdin= subprocess.PIPE, env=dict(os.environ, SELF_CALL="xxx") )
try:
process.communicate(svg_bytes,timeout=0)
except:
pass
processes.append(process)
for p in processes:
p.wait()
</code>
processes = []
# my loop that generates SVG code
process = subprocess.Popen([inkscape_path, '-p', '-o', filename],stdin= subprocess.PIPE, env=dict(os.environ, SELF_CALL="xxx") )
try:
process.communicate(svg_bytes,timeout=0)
except:
pass
processes.append(process)
for p in processes:
p.wait()
This works and takes 30 seconds, but I don’t think this is a clean way to do it.
How do I run multiple of these subprocesses in parallel in a clean way. Preferably in 1 line.
(SELF_CALL is a workaround as inkscape sometimes throws exceptions when multiple instances are running)