@genericname1
Does this happen specifically when copying something inside BAS? In the script panel where the actions are or from the browser?
What version of BAS are you using?
Please record a video demonstrating the problem so that we can understand what is happening.
BAS nodejs многопоток
-
Периодически при использовании много потока
потоки завершаются с ошибкой
Поток завершился с сообщением "Таймаут во время выполнения функции на встроенном языке"Читал на форуме по этому вопросу и там написано что так как nodejs работает в однопоточном режиме, такая вот ошибка случается
У меня используется nodejs для связи с базой mysql и еще для не которых вычислений без которых работа скрипта не возможна.
Подскажите даст ли что нить переход на nodejs v 12
Возможно стоить перевести действия для работы с базой на https://community.bablosoft.com/topic/14993/sql
Возможны Ваши какие то варианты решения данной проблемы вплоть до того что б поднять еще 1 сервер на котором запустить веб сервер на python или том же nodejs, который будет по запросам от BAS у себя выполнять все эти запросы а в BAS уже просто возвращать полученный ответ. -
-
@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