2

In line x in script A, I want to start running script B, which takes 10 seconds. However, I do not want line x+1 to be executed 10 seconds after line x. Is there a way to fix this?

Script B is simply an independent series of command sent to another external device. Script A is used to monitor that device. Script B does not have any return, and code after line x in script A does not rely on script B.

Overall, I want to trigger the start of Script B and let it run independent of Script A. While script A is kept running continuously.


Thanks to the comment, I found subprocess.Popen() can do the work.

Actually, Script B can be simplified into one single function (Function B). In this case, shall I create one Python script as Script B that only calls Function B, and use subprocess.Popen() to call Script B in Script A?

Or, is there a better way to call Function B, rather than Script B, in a similar fashion as in subprocess.Popen()?

I am trying to call Function B directly because my task is very time-dependent, and half a second of delay may be significant. I have measured the delay from the line x-1 in Script A to line 1 in Script B, if I call Script B in Script A. The delay is ~450 ms. I suspect the delay is from the time for the interpreter to compile Script B and execute it, even though Script B is one or two lines long.


Thank you very much!

Tom Xuan
  • 109
  • 1
  • 10
  • 1
    Possibly a duplicate of: https://stackoverflow.com/questions/636561/how-can-i-run-an-external-command-asynchronously-from-python – Jeremy Friesner Jul 13 '19 at 03:57

1 Answers1

1

How to run two scripts at the same time:

Use the GNU parallel ( sudo apt install parallel if not already installed on your system )

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

This way is way cheaper, than trying to orchestrate process-spawns from inside the first python session. It is possible, yet the processing costs and latency side-effects and software engineering costs are way higher, than using the smart O/S services present right for this simple problem-definition.

Reading man parallel you get all the smart bash-scripting options to add for flexible, parametrised process-options, as one may need and wish

...
total_jobs()         number of jobs in total
slot()               slot number of job
seq()                sequence number of job
...
user3666197
  • 1
  • 6
  • 50
  • 92