запуск подпроцессов параллельно с Python - PullRequest
1 голос
/ 04 марта 2020

Я пытаюсь понять, как я могу построить параллельный вычислительный конвейер для нескольких подпроцессов. Как я вижу, каждый блок подпроцесса ожидает запуска предыдущего блока кода, тогда как у меня есть конвейер, который не имеет зависимости для предыдущего запуска, и он может обрабатываться параллельно. Я хочу понять, возможно ли это, и если да, то пример синтаксиса для демонстрации того, как это сделать, очень помог бы! Заранее спасибо.

import sys
import os
import subprocess


subprocess.run("python pipelinecode1.py".split() +
               [run_date, this_wk, last_wk, prev_wk], shell=True)

subprocess.run("python pipelinecode2.py".split() +
               [run_date, this_wk, last_wk, prev_wk], shell=True)

subprocess.run("python pipelinecode3.py".split() +
               [run_date, this_wk, last_wk, prev_wk], shell=True)

1 Ответ

1 голос
/ 04 марта 2020

MCVE как есть показывает нулевую зависимость от python -интерпретатора, поэтому наиболее эффективный шаг для запуска набора взаимно независимых задач (не конвейер, где один за другим шаг порядка шаги обработки "формы""конвейер" ) равен GNU parallel:

$ parallel python {} run_date this_wk last_wk prev_wk ::: pipelinecode1.py \
                                                          pipelinecode2.py  \
                                                          pipelinecode3.py

Таким образом, вы не тратите ресурсы ЦП / кеша и не выходите из блокировки и GIL-lock вновь представил повторное выполнение кода [SERIAL] без каких-либо дополнительных накладных расходов.

Для всех доступных конфигураций прочитайте соответствующие подробности в man parallel

...