@UserTrue
Когда искал по форуму, часто встречал ответы этого пользователя. Если найдется минутка, поделитесь опытом. Пока выделил два возможных решения замены curl http. Может есть еще варианты? Какой вариант для вас лучше?
BAS nodejs многопоток
-
-
@gomeapat Использую 50 потоков node.js v12, спустя 20-200 минут работы все потоки отваливаются
"Таймаут во время выполнения функции на встроенном языке", причем возвращаясь в цикле на повтор - все равно уйдут в эту же ошибку
Пока не хочу делать отдельно "серверную прогу" для действия
попробую ограничить через глобальную переменную не более 5 node js одновременно, с таймаутом 10 секунд, если и это не поможет, то я тогда уже не знаю как быть) -
@tet-vivi в отдельных потоках также само будет вызываться блок node
очередь помогает (сделал не более 5 одновременных node, остальные ожидают), но это мне слабо подходит, так как и без того нагрузка на процессор не доходила 10% но зато node постоянно умирал от таймаута
-
@UserTrue said in BAS nodejs многопоток:
@Teror2 я имел ввиду глобальные переменные nodejs global.variable =
Можете рассказать чуть подробнее с кодом?
У меня есть node код, в котором есть обарщение к файламconst fs = require('fs'); ... fs.existsSync(filename)... fs.readFileSync... fs.writeFileSync...Я думаю, что много потоков обращаются иногда к одним и тем же файлам поэтому я получаю ошибку "Таймаут во время выполнения функции на встроенном языке".
Node код можно как то изменить чтобы не получать такую ошибку? -
@Vincent_ said in BAS nodejs многопоток:
@UserTrue node_log.txt ошибок не содержит
Проблемы начинаются только когда я ставлю много потоковНе знаю, нужно разбираться. Лично у меня нет на это времени. Nodejs в бас не работает больше чем 255 потоков без особых трюков )
-
@UserTrue said in BAS nodejs многопоток:
@Vincent_ said in BAS nodejs многопоток:
@UserTrue node_log.txt ошибок не содержит
Проблемы начинаются только когда я ставлю много потоковНе знаю, нужно разбираться. Лично у меня нет на это времени. Nodejs в бас не работает больше чем 255 потоков без особых трюков )
Я не прошу разбираться конкретно в моем коде)
У вас коде node есть множественные обращения к файловой системе? -
@Vincent_ said in BAS nodejs многопоток:
Я не прошу разбираться конкретно в моем коде)
У вас коде node есть множественные обращения к файловой системе?Всякого хватает, можете просто попробовать увеличть таймаут. А кстати зачем вы используете синхронные методы?
-
@UserTrue said in BAS nodejs многопоток:
@Vincent_ said in BAS nodejs многопоток:
Я не прошу разбираться конкретно в моем коде)
У вас коде node есть множественные обращения к файловой системе?Всякого хватает, можете просто попробовать увеличть таймаут.
А кстати зачем вы используете синхронные методы?Уже увеличил, то же самое.
Читаю файл и если он есть, то немного обновляю его, нет - создаю и пишу туда данные
... // имя файла, в который сохраняю результат var crypto = require('crypto'); var hash = crypto.createHash('md5').update([[URL_CURRENT]]).digest('hex'); var filename = [[SAVE_FOLDER]] + hash + '.txt'; const fs = require('fs'); // проверить был ли url загружен ранее if (fs.existsSync(filename)) { console.log("Был загружен ранее " + [[URL_CURRENT]]); if (keyword.length > 0) { // сохранить keyword var content = fs.readFileSync(filename, 'utf8').replace(/^\uFEFF/, ''); var kwRgxp = new RegExp("<!--keywords \[ (.*?) \]-->","i"); if (kwRgxp.test(content)) { // контент уже содержит keywords, новые надо дописать var m = content.match(kwRgxp); var keywords = m[1] + "," + [[KEYWORD]]; keywords = m[1].split(','); keywords = [...new Set(keywords)]; keywords = keywords.join(','); content = content.replace(kwRgxp, "<!--keywords [ " + keywords + " ]-->"); } else { // контент не содержит ключи, дописываю конструкцю в конец content = content + "<!--keywords [ " + [[KEYWORD]] + " ]-->"; } // записать результат в файл fs.writeFileSync(filename, content); } [[URL_CURRENT]] = ''; } -
@Vincent_ said in BAS nodejs многопоток:
@UserTrue Спасибо, я в курсе, что это вссе можно без node. Но мне так и проще и нагляднее
Что проще это заметно xD
-
@rkk9 said in BAS nodejs многопоток:
@UserTrue подскажешь что за "особые трюки" ?
Я уже писал где-то, весь код должен инициализироваться один раз, все нужны методы должны быть доступны из global и из него вызываться. Чтобы это реализоватся особенно с асинхронным кодом нужны некоторые знания в js и nodejs