我有一个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中执行此操作,这使得确定哪个方法有点棘手。 Asyncio,子进程等。
答案 0 :(得分:1)
您可以使用multiprocessing和subprocess模块
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将异步调用数组的每个元素(第二个参数)的函数(第一个参数)。一旦完成所有调用,它将返回一个包含结果的列表(在这种情况下不使用),代码将继续像往常一样执行。因此,第一个脚本将在前两个脚本完成后运行