如何同时运行两个脚本

时间:2019-07-12 00:05:23

标签: python-3.x multithreading parallel-processing subprocess popen

在脚本A的x行中,我想开始运行脚本B,这需要10秒钟。但是,我不希望行x + 1在行x之后10秒执行。有办法解决这个问题吗?

脚本B只是发送到另一个外部设备的一系列独立命令。脚本A用于监视该设备。脚本B没有任何返回值,并且脚本A中第x行之后的代码不依赖脚本B。

总的来说,我想触发脚本B的启动并使它独立于脚本A运行。在脚本A保持连续运行的情况下。


感谢评论,我发现subprocess.Popen()可以完成工作。

实际上,脚本B可以简化为一个功能(功能B)。在这种情况下,我是否应该创建一个仅作为脚本B的Python脚本,仅调用函数B,然后使用subprocess.Popen()在脚本A中调用脚本B?

或者,有没有一种类似于subprocess.Popen()的方式来调用函数B而不是脚本B的更好方法?

我试图直接调用功能B,因为我的任务非常依赖时间,并且延迟半秒可能很重要。如果我在脚本A中调用脚本B,我已经测量了从脚本A中的x-1行到脚本B中的行1的延迟。延迟约为450毫秒。我怀疑延迟是从解释器编译脚本B并执行它的时间开始的,即使脚本B长了一两行。


非常感谢您!

1 个答案:

答案 0 :(得分:1)

  

如何同时运行两个脚本:

使用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
...