使用 Node SDK 将任务发送到 Azure Batch Jobs
Sending tasks to Azure Batch Jobs with Node SDK
我正在尝试将大量任务发送到 Azure Batch。一共有三个作业,总共有 67,000 个任务分布在这些作业中。
当我只发送几个任务时,一切正常,当我打开它发送完整列表时,它似乎失败了,但没有任何有用的错误消息。总数有某种限制吗?或者我可以发送它们的速率?我正在使用 Azure Functions、Node SDK 并承诺异步添加任务。
async.each(tasks, function(task, callback) {
var taskID = task.id + '_process';
var config = {
id: taskID,
displayName: 'Render portion ' + task.id + ' in job ' + task.job.id,
commandLine: "python3 main.py '" + JSON.stringify(task) + "'"
};
batchClient.task.add(task.job.id, config).then(function(result) {
context.log('Task for portion : ' + task.id + ' submitted successfully');
callback();
}).catch(function(error){
context.log('Task failed to be added');
callbacK(error);
});
}, function(error) {
if( error ) {
context.log('Error adding task.');
context.res = { body: error };
context.done();
} else {
context.log('All tasks have been queued successfully');
context.res = { body: 'All tasks have been queued successfully' };
context.done();
}
});
在这一点上,即使只是出现错误,我也会很高兴,只要能给我一些继续下去的东西。我试过发送 10 个任务,它工作正常,发送 65,000 个任务,它无声地失败了。
我建议您使用 Add task collection API 而不是添加任务 API,因为集合 API 在单个 API打电话。这应该可以让您将 API 调用的总数减少 100 倍。
如果您使用那个 API 并且仍然遇到问题,则可能是 SDK 中存在一些具有非常高并行度的问题...可能值得尝试删除对 Batch 和确认您现有的代码没有问题(只需将其替换为静态 URL 上的简单 http 获取?)
我正在尝试将大量任务发送到 Azure Batch。一共有三个作业,总共有 67,000 个任务分布在这些作业中。
当我只发送几个任务时,一切正常,当我打开它发送完整列表时,它似乎失败了,但没有任何有用的错误消息。总数有某种限制吗?或者我可以发送它们的速率?我正在使用 Azure Functions、Node SDK 并承诺异步添加任务。
async.each(tasks, function(task, callback) {
var taskID = task.id + '_process';
var config = {
id: taskID,
displayName: 'Render portion ' + task.id + ' in job ' + task.job.id,
commandLine: "python3 main.py '" + JSON.stringify(task) + "'"
};
batchClient.task.add(task.job.id, config).then(function(result) {
context.log('Task for portion : ' + task.id + ' submitted successfully');
callback();
}).catch(function(error){
context.log('Task failed to be added');
callbacK(error);
});
}, function(error) {
if( error ) {
context.log('Error adding task.');
context.res = { body: error };
context.done();
} else {
context.log('All tasks have been queued successfully');
context.res = { body: 'All tasks have been queued successfully' };
context.done();
}
});
在这一点上,即使只是出现错误,我也会很高兴,只要能给我一些继续下去的东西。我试过发送 10 个任务,它工作正常,发送 65,000 个任务,它无声地失败了。
我建议您使用 Add task collection API 而不是添加任务 API,因为集合 API 在单个 API打电话。这应该可以让您将 API 调用的总数减少 100 倍。
如果您使用那个 API 并且仍然遇到问题,则可能是 SDK 中存在一些具有非常高并行度的问题...可能值得尝试删除对 Batch 和确认您现有的代码没有问题(只需将其替换为静态 URL 上的简单 http 获取?)