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