Здравствуйте. В апарсере версии 1.2.178 написал js-парсер, работающий со сторонним nodejs модулем(самописным). Запускается на 300 потоках.
Очень часто при его работе возникает следующая ситуация: на одном или нескольких потоках парсер перестает работать на строке
(на логах видно, что доходит до этой строки и дальше не идет).
Большинство потоков отрабатывают корректно.
Из-за этой ситуации задание не может завершиться и висит до тех пор, пока его не удалят.
Подскажите, пожалуйста, по какой причине такое может происходить (ошибка в апарсере либо не совсем правильно написан js) и как это исправить.
Упрощенный пример кода парсера:
Очень часто при его работе возникает следующая ситуация: на одном или нескольких потоках парсер перестает работать на строке
Код:
await this.foobarService.isValid
Большинство потоков отрабатывают корректно.
Из-за этой ситуации задание не может завершиться и висит до тех пор, пока его не удалят.
Подскажите, пожалуйста, по какой причине такое может происходить (ошибка в апарсере либо не совсем правильно написан js) и как это исправить.
Упрощенный пример кода парсера:
Код:
/**
* Есть разработанный nodejs-модуль FoobarService, который занимается проверкой URL'ов.
* Проблема возникает при вызове async/await. Подробнее см. код.
*/
const FoobarService = require("foobarservice"); // подключаем сервис
class Parser {
constructor() {
//this.defaultConf = ...
this.foobarService = FoobarService.create();
}
async* parse(set, results) {
response = yield* await this.parse2(set);
results.success = response.success;
return results;
}
async* parse2(set) {
const result = {success: true};
const url = "https://foobar.ru/a/b/c.html"; // URL
try {
// дальше этого места код не выполняется!!!
// парсинг на этом потоке останаваливается
const isValid = await this.foobarService.isValid(url); //тут возвращается Promise
if (isValid === true) {
return result;
}
} catch (e) {
this.logger.put(e);
}
const response = yield this.request("GET", requestUrl, {}, {
parsecodes: this.parsecodes,
browser: 1,
});
// выполяется какая-то бизнес-логика...
return result;
}
}