Как запустить два скрипта одновременно - PullRequest
2 голосов
/ 12 июля 2019

В строке x в скрипте A я хочу запустить скрипт B, который занимает 10 секунд. Однако я не хочу, чтобы строка x + 1 выполнялась через 10 секунд после строки x. Есть ли способ это исправить?

Скрипт B - это просто независимая серия команд, отправляемых на другое внешнее устройство. Скрипт А используется для мониторинга этого устройства. Скрипт B не имеет возврата, а код после строки x в скрипте A не опирается на скрипт B.

В целом, я хочу запустить сценарий B и позволить ему работать независимо от сценария A. Пока сценарий A работает непрерывно.


Благодаря комментарию я обнаружил, что subprocess.Popen () может выполнить эту работу.

На самом деле, сценарий B можно упростить до одной функции (функция B). В этом случае, я должен создать один сценарий Python в качестве сценария B, что только вызывает функцию B, и использовать subprocess.Popen () для вызова скрипта B в Script A

Или есть ли лучший способ для вызова функции B, а не сценария B, аналогично подпроцессу. Popen ()?

Я пытаюсь вызвать функцию B напрямую, потому что моя задача очень зависит от времени, и задержка в полсекунды может быть значительной. Я измерил задержку от строки x-1 в сценарии A до строки 1 в сценарии B, если я вызываю сценарий B в сценарии A. Задержка составляет ~ 450 мс. Я подозреваю, что задержка от того, что интерпретатор скомпилирует сценарий B и выполнит его, даже если сценарий B имеет длину в одну или две строки.


Большое спасибо!

1 Ответ

1 голос
/ 12 июля 2019

Как запустить два скрипта одновременно:

Используйте параллельную GNU (sudo apt install parallel, если она еще не установлена ​​в вашей системе)

Alan@Enigma:~$ parallel python ::: TheScript_A TheScript_B [ TheScript_C [ ... ]]

Этот способ намного дешевле, чем пытаться организовать порождения процессов внутри первого сеанса Python. Это возможно, однако затраты на обработку, побочные эффекты, связанные с задержкой, и затраты на разработку программного обеспечения намного выше, чем при использовании интеллектуальных служб O / S, представленных прямо для этого простого определения проблемы.

Чтение man parallel вы получаете все опции интеллектуального bash-скриптинга, которые вы можете добавить для гибких параметризованных опций процесса, по мере необходимости и желания

...
total_jobs()         number of jobs in total
slot()               slot number of job
seq()                sequence number of job
...
...