запустить параллельный процесс, когда другой конец в bash - PullRequest
1 голос
/ 09 апреля 2020

У меня есть задача, когда мне нужно запустить шесть python скриптов из bash. У меня есть три коротких сценария (сфотографировать) и три длинных (обработка изображения), которые должны запускаться после того, как фото сделано.

Я знаю, что для запуска двух последовательных процессов мне нужно написать

python script1.py
python script2.py

и для параллельного выполнения я должен написать

python script1.py & python script2.py

Но как мне добиться чего-то такого:

enter image description here

2-й и 3-й процессы выполняются параллельно, после 1-го,

4-й и 5-й параллели запуска, когда 2 закончен (3-й еще активен)

6-й запуск, когда 4-й закончен (3-й и 5-й еще активны )

1 Ответ

1 голос
/ 09 апреля 2020

Вы можете добавить & к команде, чтобы запустить ее в фоновом режиме, и использовать встроенную функцию wait, чтобы дождаться завершения фонового задания sh.

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

#!/usr/bin/env bash

demo() {
    echo "$1 starting for $2 seconds"
    sleep "$2"
    echo "$1 done"
}

echo "Begin Demonstration"

# Process 1 runs in the foreground.
demo 1 2
# Now run 3 in the background after 1 finishes.
demo 3 10 &
# And 2 in the foreground.
demo 2 2
# Now run 5 in the background after 2 finishes.
demo 5 10 &
# And 4 in the foreground.
demo 4 2
# Finally run 6 after 4 finishes.
demo 6 10
# Wait for any still running jobs to finish.
wait

echo "End Demonstration"

Запуск этого сценария приведет к выводу:

Begin Demonstration
1 starting for 2 seconds
1 done
2 starting for 2 seconds
3 starting for 10 seconds
2 done
4 starting for 2 seconds
5 starting for 10 seconds
4 done
6 starting for 10 seconds
3 done
5 done
6 done
End Demonstration
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...