0

我正在尝试将大量任务发送到 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 个,它默默地失败。

4

1 回答 1

1

我建议您使用添加任务集合API 而不是添加任务 API,因为集合 API 在单个 API 调用中最多可以处理 100 个任务。这应该允许您将 API 调用的总数减少 100 倍。

如果您使用该 API 并且仍然遇到问题,则可能是 SDK 中存在一些具有非常高并行度的问题......可能值得尝试删除对 Batch 的调用并确认您的代码没有问题保持原样(只需将其替换为静态 URL 上的简单 http get 即可?)

于 2017-11-10T01:56:27.400 回答