2017-01-01 3 views
0

В проекте, над которым я работаю, я пытаюсь проанализировать 500 блоков текста с помощью анализатора тонов Ватсона. Проблема в том, что когда я запускаю параллельные 500 http-звонков, время обслуживания отключается. Ниже приведен код, который дает мне вопросы:Как продлить таймаут при использовании анализатора тонов Ватсона

function analyzeManyPosts(posts){ 

    var qPromise = q.defer(); 

    const count = posts.length; 

    var promList = posts.map(function(post){ 
     // analyzeSinglePost is another function I wrote that returns a promise 
     // that works as intended 
     return analyzeSinglePost(post); 
    }); 

    //Return a collection of all promises 
    return q.all(promList); 
} 

Когда я вызываю выше функции я получаю ошибку таймаута, который считывает Error: connect ETIMEDOUT

Мои два варианта являются либо

  • увеличить время ожидания , или
  • убедитесь, что я запускаю вызов n после вызова n-1.

Я ищу способ сделать первый вариант, прежде чем по умолчанию выполнить второй.

Спасибо!

+0

Если вы используете bluebird, у него есть функция «map» с параллелизмом, где вы можете сказать, что она запускает только 8 вызовов одновременно. –

ответ

0

В итоге я использовал throat, чтобы ограничить одновременные вызовы, чтобы ни один вызов не был отключен. Я сделал это следующим образом:

function analyzeManyPosts(posts){ 

    var qPromise = q.defer(); 

    const count = posts.length; 

    //Limit to 50 calls at a time 
    var promList = posts.map(throat(function(post, i){ 
     console.log(i); 
     return analyzeSinglePost(post); 
    }, 50)); 

    //Return a collection of all promises 
    return q.all(promList); 
} 

Таким образом, только 50 звонков осуществляется в то время, избегая тайм-аут, когда все 500 звонков делаются сразу.