@Fox Привет.Я описывал задачу в этой теме https://community.bablosoft.com/topic/27417/вызов-многопоточной-функции
Дело в том,что я не могу вообще никак перевести свой скрипт на многопоток,у меня тупо,что в вызове функции в многопоток,что просто обычный многопоток,выполняет свою работу с данными по очереди,а не одновременно.И это очень сильно бьет по времени,а нужна именно скорость обработки.Все уже готово и скрипт рабочий полностью,но скорость обработки заставила воспользоваться многопотоком.Ранее,подобных проблем не замечал,а сейчас элементарную задачу не могу уже несколько дней решить.
Скрипт очень простой и работает без браузера вообще,в скрипте используется только одно взаимодействие с гет запросом.Пример скрипта я приложил в этой теме(но без запросов),он точно почти такой же,как и основа.
Логика такова:
1)Запускается скрипт (без всяких ресурсов изначально и данных) и создаются два ресурса.
2)Делается запрос на сайт,который обрабатывается в отдельной функции,т.е. обрабатывает полученные строки и записывает в ресурс.
3)Вызывается функция в несколько потоков,которая работает (должна работать) с каждой строкой из созданного ранее ресурса(уникальной)в отдельном потоке.Данные обрабатываются и записываются во второй ранее созданный ресурс.
4)Как только данные обработаны,ресурс переводится в список и список записывается в файл.Более ничего не делается.
-Сперва я думал,что проблема в создаваемых в ходе работы ресурсах,но нет.Создавал изначально ресурсы и то же самое было.
-Потом пробовал брать из файлов значения\потом создавать файлы по ходу и из них брать данные\сохранять напрямую пытался и.т.д
-Возможно думал стоят какие то ограничения из за слабого пк с 4 гб оперативы и взял сервер с 64 гб,но как обрабатывалась строка за 5 минут на моем пк,так же по скорости и на серваке.Ладно, с этим я уже ничего не поделаю из за регулярок в проекте,согласен.Но вот перевести на поток и хотя бы по 10 строк одновременно обрабатывать,очень бы помогло.А сейчас в любом случае,у меня,сколько бы потоков не выставил - работает все равно как один,просто по очереди разный поток берет свои данные(
Найти пустую папку. Но находит последюю в списке.
-
Есть список [[SPISOK]] , каждый элемент списка- это путь к определённой папке.
Нужно найти первую пустую (меньше 1 мб) папку и записать путь к ней в перем [[ITOG]] , но должно выполняться условие что после неё в списке [[SPISOK]]
стоит папка размером 100мб или больше.Пробовал Nodejs 18 пакет get-folder-size и функция getFolderSize но не заработало.
Использую Nodejs 18. Реализую определение размера папок с помощью встроенных инструментов fs.
Но получаю в переменной itog просто самую последнюю папку в списке, она весит 41 мб. ..не подпадая под условия быть меньше 1 мб и после нее должна в списке стоять папка более 100 мб что также не выполняется т к после неё нет ни одного элемента в списке.Код:
// Step 1 const fs = require('fs'); const path = require('path'); const spisok = [[SPISOK]]; // Declare variables let pytkpystoypapke = ""; // path to found folder with size less than 1000000 bytes let itog = ""; // path to found folder will be saved in this variable // Loop through all folders in list "spisok" for (let i = 0; i < spisok.length; i++) { let folderSize = fs.statSync(spisok[i]).size; // get size of current folder if (folderSize < 1000000) { // check if size is less than 1000000 bytes if (i < spisok.length - 1) { // check if there is another folder in list "spisok" let nextFolderSize = fs.statSync(spisok[i + 1]).size; // get size of next folder if (nextFolderSize > 1000000) { // check if next folder size is greater than 1000000 bytes pytkpystoypapke = spisok[i]; // save path to current folder in "pytkpystoypapke" break; // exit the loop } } else { pytkpystoypapke = spisok[i]; // save path to current folder in "pytkpystoypapke" break; // exit the loop } } } itog = pytkpystoypapke; // save path to found folder in "itog" variable [[ITOG]] = pytkpystoypapke; // save path to found folder in "itog" variable // Output result console.log(itog); -
Сам разобрался, может кому-то будет полезно, вот готовый код, выполнять в кубике node.js (я выполнял в node18) .... кстати, больше 80% кода сгенерирована нейронкой https://chat.openai.com/chat
Задача выполняется двумя кубиками node.js
1) Сначала ищем из каталога все папки и переворачиваем этот список . Полученный список сохраняем в [[SPISOK]]
// Step 1 // Get the path to the "D:\\2 отправленое\\АНАЛИЗ" folder const path = "D:\\2 отправленое\\АНАЛИЗ"; // Create an empty list to store the paths to the folders inside the "creep-analysis" folder let spisok = []; // Use the fs (file system) module to read the contents of the "creep-analysis" folder const fs = require('fs'); const files = fs.readdirSync(path); // Loop through the contents of the "creep-analysis" folder and add the paths to the folders to the "spisok" list files.forEach((file) => { // Check if the current item is a folder if (fs.lstatSync(path + '/' + file).isDirectory()) { // Add the path to the folder to the "spisok" list spisok.push(path + '/' + file); } }); // Step 2 // Sort the "spisok" list in descending order by the number that each folder name starts with spisok.sort((a, b) => { // Get the folder name from the path of each item in the list const folderNameA = a.split('/').pop(); const folderNameB = b.split('/').pop(); // Extract the number that each folder name starts with const numberA = parseInt(folderNameA.match(/^\d+/)[0]); const numberB = parseInt(folderNameB.match(/^\d+/)[0]); // Compare the numbers and sort the list in descending order return numberB - numberA; }); // Step 3 // Save the sorted "spisok" list to the "itog" variable [[SPISOK]] = spisok;2) Далее ищем папку которая имеет вес меньше 1 мб и при условии что в каталоге где она лежит следующей будет папка с весом >=100мб
Готовый рабочий код, полный путь к итоговой папке сохраняется в [[PYT_K_PROSHLOY_PYSTOY_PAPKE]]:// Declare the list "spisok" let spisok = [[SPISOK]]; const fs = require('fs'); // Use a for loop to go through all elements of the list "spisok" for (let i = 0; i < spisok.length; i++) { let folderPath = spisok[i]; // Assign each value of the loop to the variable "folderPath" //console.log(folderPath); // Print the value of "folderPath" in the log // шаг 1. начитаем получать размер папки путь к ней лежит в folderPath function getFolderSize(path) { let totalSize = 0; const files = fs.readdirSync(path); for (let i = 0; i < files.length; i++) { const stats = fs.statSync(path + '//' + files[i]); if (stats.isFile()) { totalSize += stats.size; } else if (stats.isDirectory()) { totalSize += getFolderSize(path + '//' + files[i]); } } return totalSize; } const folderSize = getFolderSize(folderPath); // закончили получать размер папки "folderPath" // и размер записали в "folderSize" if (folderSize < 1000000); { // шаг 2. получаем размер папки лежащей ниже let nextElement = spisok[i + 1]; function getFolderSize(path) { let totalSize = 0; const files = fs.readdirSync(path); for (let i = 0; i < files.length; i++) { const stats = fs.statSync(path + '//' + files[i]); if (stats.isFile()) { totalSize += stats.size; } else if (stats.isDirectory()) { totalSize += getFolderSize(path + '//' + files[i]); } } return totalSize; } const nextFolderSize = getFolderSize(nextElement); // закончили получать размер папки лежащей ниже и запись // записали размер в "nextFolderSize" if (nextFolderSize > 100000000) { console.log(folderPath); //console.log(folderSize); //console.log(folderPath); [[PYT_K_PROSHLOY_PYSTOY_PAPKE]] = folderPath; break } } }