@Fox Привет.Я описывал задачу в этой теме https://community.bablosoft.com/topic/27417/вызов-многопоточной-функции
Дело в том,что я не могу вообще никак перевести свой скрипт на многопоток,у меня тупо,что в вызове функции в многопоток,что просто обычный многопоток,выполняет свою работу с данными по очереди,а не одновременно.И это очень сильно бьет по времени,а нужна именно скорость обработки.Все уже готово и скрипт рабочий полностью,но скорость обработки заставила воспользоваться многопотоком.Ранее,подобных проблем не замечал,а сейчас элементарную задачу не могу уже несколько дней решить.
Скрипт очень простой и работает без браузера вообще,в скрипте используется только одно взаимодействие с гет запросом.Пример скрипта я приложил в этой теме(но без запросов),он точно почти такой же,как и основа.
Логика такова:
1)Запускается скрипт (без всяких ресурсов изначально и данных) и создаются два ресурса.
2)Делается запрос на сайт,который обрабатывается в отдельной функции,т.е. обрабатывает полученные строки и записывает в ресурс.
3)Вызывается функция в несколько потоков,которая работает (должна работать) с каждой строкой из созданного ранее ресурса(уникальной)в отдельном потоке.Данные обрабатываются и записываются во второй ранее созданный ресурс.
4)Как только данные обработаны,ресурс переводится в список и список записывается в файл.Более ничего не делается.
-Сперва я думал,что проблема в создаваемых в ходе работы ресурсах,но нет.Создавал изначально ресурсы и то же самое было.
-Потом пробовал брать из файлов значения\потом создавать файлы по ходу и из них брать данные\сохранять напрямую пытался и.т.д
-Возможно думал стоят какие то ограничения из за слабого пк с 4 гб оперативы и взял сервер с 64 гб,но как обрабатывалась строка за 5 минут на моем пк,так же по скорости и на серваке.Ладно, с этим я уже ничего не поделаю из за регулярок в проекте,согласен.Но вот перевести на поток и хотя бы по 10 строк одновременно обрабатывать,очень бы помогло.А сейчас в любом случае,у меня,сколько бы потоков не выставил - работает все равно как один,просто по очереди разный поток берет свои данные(
Проверка на наличие элемента в ресурсе
-
Здравствуйте. Подскажите, пожалуйста как можно, без костылей, реализовать следующую задачу:
В OnApplicationStart создаётся ресурс "USERS"
В функции "Parser" происходит парсинг юзеров и заносится по очереди в переменную "USER". Делается проверка if {{USERS}}.indexOf( [[USER]] ) < 0 --> Добавить переменную USER, в ресурс. Если в ресурсе присутствует хотя бы один элемент, всё отрабатывает, без проблем, но, если ресурс пустой, как, например, в начале скрипта, то останавливается с сообщением "Ожидаю ресурс". Если убрать чекбокс "Ждать появления", то вылезет ошибка "Все данные были отработаны для USERS -
@GhostZ , благодарю за ответ.
Поясню более подробно для тех, кто как и я, не знаком с языками программирования. GhostZ посоветовал использовать Апи для работы с ресурсами, в Басе. Более подробно можно ознакомиться здесь.
Решение, в моем случае, выглядит следующим образом:
var lines = RMap("USERS") var index = lines.indexOf([[USER]]) if(index == -1) lines.insert([[USER]])где "USERS" - ресурс со строками, а "USER" - переменная, на наличие которой проверяется ресурс.
Отдельное спасибо @Rusbear , так как на основе его кода, был сделан этот
-
@GhostZ , да, так получше, особенно, если учитывать, что я забыл, что нужно делать проверку так же на наличие и в блеклисте и если в обоих ресурсах нет строки из переменной "USER", то только тогда нужно добавить. На примере вашего сокращенного кода добавил проверку и на наличие, в блеклисте:
var a = RMap("USERS"), b = RMap("BLACKLIST"); var index = a.indexOf([[USER]]) if(index == -1) var index = b.indexOf([[USER]]) if(index == -1) {a.insert([[USER]])} -
@azaza777 said in Проверка на наличие элемента в ресурсе:
@GhostZ , теперь можно двигаться дальше :) Спасибо
My script use 1 line every few minutes from a txt file called ip.txt . Can I use the code above to check if the line from user.txt exist in the file called blacklist.txt before the script use the line? If the line from from user.txt exist in blacklist.txt then I need to move to the next line and ignore this one.
-
@andreiem , sure, but it needs to be changed a bit.
var index = 0; ip = true; while (ip == true) { var ip = (RMap("BLACKLIST").indexOf(RMap("IPS").at(index)) >= 0) if (ip == true) { index = (index+1) } } [[IP]] = RMap("IPS").at(index)Where "IPS" resource with IPs list
"BLACKLIST" blacklist with IPsI'm not coder but it working ;)
test script
ips.xml