如何在 Python 中运行一系列异步 shell 脚本



我有一个nodejs脚本,使用带有回调的并行异步调用,以便按照它们需要运行的顺序执行一系列shell脚本。(数据分析任务取决于前面步骤处理的数字(

伪代码 nodejs 示例:

async.parallel([
  async.apply('/usr/local/bin/foo some/path/to/some/script.sh 1'),
  async.apply('/usr/local/bin/foo some/path/to/some/script.sh 2'),
], function () {
  async.parallel([async.apply('/usr/local/bin/foo some/path/to/some/script.sh 3')];
});

因此,它将同时运行前两个,当它们都完成后,运行下一个。实际上,这是许多层次的。我希望用 Python 版本替换它,但我正在努力弄清楚可以利用哪些模块/包来实现它。

搜索已经提出了许多在Python中执行此操作的可能方法,这使得确定要选择哪一种有点棘手。异步、子进程等。

您可以使用多处理和子流程模块

from multiprocessing import Pool
from subprocess import call
Pool(2).map(call, [
    ["/usr/local/bin/foo some/path/to/some/script.sh", "1"],
    ["/usr/local/bin/foo some/path/to/some/script.sh", "2"]
])
call(["/usr/local/bin/foo some/path/to/some/script.sh", "3"])

Pool.map 将使用数组的每个元素(第二个参数(异步调用一个函数(第一个参数(。完成所有调用后,它将返回一个包含结果的列表(在这种情况下不使用(,代码将继续照常执行。因此,第三个脚本将在前两个脚本完成后运行

最新更新