Как запустить подпроцесс Python с PIPE параллельно?Python

Программы на Python
Anonymous
Как запустить подпроцесс Python с PIPE параллельно?

Сообщение Anonymous »

Я конвертирую несколько изображений SVG в PNG с помощью Inkscape.
Однопоточный:

Код: Выделить всё

    # my loop that generates SVG code
process = subprocess.run([inkscape_path, '-p', '-o', filename],input=svg_bytes)
Это работает и занимает в общей сложности 85 секунд для 30 изображений.
Если я попробую это с помощью communication(), он будет ждать завершения каждого процесса. Поэтому я устанавливаю тайм-аут равным 0 и игнорирую возникшее исключение.

Код: Выделить всё

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()
Это работает и занимает 30 секунд, но я не думаю, что это простой способ сделать это.
Как мне запустить несколько эти подпроцессы параллельно и чисто. Желательно в 1 строку.
(SELF_CALL — обходной путь, поскольку inkscape иногда выдает исключения при запуске нескольких экземпляров)

Подробнее здесь: https://stackoverflow.com/questions/788 ... n-parallel

Вернуться в «Python»