@Fox Привет.Я описывал задачу в этой теме https://community.bablosoft.com/topic/27417/вызов-многопоточной-функции
Дело в том,что я не могу вообще никак перевести свой скрипт на многопоток,у меня тупо,что в вызове функции в многопоток,что просто обычный многопоток,выполняет свою работу с данными по очереди,а не одновременно.И это очень сильно бьет по времени,а нужна именно скорость обработки.Все уже готово и скрипт рабочий полностью,но скорость обработки заставила воспользоваться многопотоком.Ранее,подобных проблем не замечал,а сейчас элементарную задачу не могу уже несколько дней решить.
Скрипт очень простой и работает без браузера вообще,в скрипте используется только одно взаимодействие с гет запросом.Пример скрипта я приложил в этой теме(но без запросов),он точно почти такой же,как и основа.
Логика такова:
1)Запускается скрипт (без всяких ресурсов изначально и данных) и создаются два ресурса.
2)Делается запрос на сайт,который обрабатывается в отдельной функции,т.е. обрабатывает полученные строки и записывает в ресурс.
3)Вызывается функция в несколько потоков,которая работает (должна работать) с каждой строкой из созданного ранее ресурса(уникальной)в отдельном потоке.Данные обрабатываются и записываются во второй ранее созданный ресурс.
4)Как только данные обработаны,ресурс переводится в список и список записывается в файл.Более ничего не делается.
-Сперва я думал,что проблема в создаваемых в ходе работы ресурсах,но нет.Создавал изначально ресурсы и то же самое было.
-Потом пробовал брать из файлов значения\потом создавать файлы по ходу и из них брать данные\сохранять напрямую пытался и.т.д
-Возможно думал стоят какие то ограничения из за слабого пк с 4 гб оперативы и взял сервер с 64 гб,но как обрабатывалась строка за 5 минут на моем пк,так же по скорости и на серваке.Ладно, с этим я уже ничего не поделаю из за регулярок в проекте,согласен.Но вот перевести на поток и хотя бы по 10 строк одновременно обрабатывать,очень бы помогло.А сейчас в любом случае,у меня,сколько бы потоков не выставил - работает все равно как один,просто по очереди разный поток берет свои данные(
Не подставляется переменная в регулярку
-
Доброго времени суток! Нужно подставить в регулярку переменную с префиксом.
Так, без переменной, регулярка пашет:
var RegExp1 = /MY_PREFIX_[\s\S]+?:\s[\s\S]+)/
var Result = RegExp1.test(ConfigString)А так, с динамически заданным префиксом, уже нет:
var Prefix = VAR_MY_PREFIX
var RegExp1 = (new RegExp('/('+ Prefix +'[\s\S]+?:\s[\s\S]+)/'))
var Result = RegExp1.test(ConfigString)Пробовал и без скобок:
var RegExp1 = new RegExp('/('+ Prefix +'[\s\S]+?:\s[\s\S]+)/')
Не помогает.
Что я делаю не так? -
@pragmatik Вот пример:
var test='Вася'; var reg = new RegExp('\\s'+test,'i'); log(reg.test('Меня зовут Вася') );Если рег выражение создается через конструктор, то не надо оборачивать в /.../ т.к. там должна быть строка. И все спецсимволы в строке должны экранироваться \
-
@Pragmatik В следующий раз выкладывайте строку к которой применяете код тоже.
У меня BAS ругается на твою регулярку
MY_PREFIX_[\s\S]+?:\s[\s\S]+)Так как не экранирована закрывающая скобка вконце
MY_PREFIX_[\s\S]+?:\s[\s\S]+\)
var ConfigString = "1234123MY_PREFIX_фыва: фывафывафывафыва )" var RegExp1 = /MY_PREFIX_[\s\S]+?:\s[\s\S]+\)/ var Result = RegExp1.test(ConfigString) log(Result) //true
Если рег выражение создается через конструктор, то не надо оборачивать в /.../ т.к. там должна быть строка. И все спецсимволы в строке должны экранироваться \
Долго я печатал
:Dvar ConfigString = "1234123MY_PREFIX_фыва: фывафывафывафыва )" var Prefix = "MY_PREFIX_" var RegExp1 = new RegExp(Prefix+"[\\s\\S]\+\?:\\s[\\s\\S]+\\\)","g") var Result = RegExp1.test(ConfigString) log(Result) //true -
Да, все спецзнаки в переменной тоже должны быть экранированы.
-
@Pragmatik Регулярки всё таки странные, приведи пример данных к которым ты применяешь регулярку
-
@fox есть конфигурационный файл. В нём есть код, и есть комменты. У меня любая строка кода начинается с префикса, а любой коммент с решётки (#). Данный цикл работает в два этапа: первая регулярка отделяет код от комментов по преффиксу ( можно делать наоборот, исключать комменты по #, но думаю, удобнее так, в комменты тогда можно вообще что угодно вставлять безо всяких спецсимволов, главное, чтобы там преффикса не было ). А вторая регулярка уже берёт готовый код без преффикса. Данный цикл берёт из массива данных считанного построчно конфига все строки с кодом и формирует из них отдельный массив, чтобы работало быстрее. Далее по такому же принципу я нахожу по преффиксу нужный мне код в этом массиве и присваиваю нужным переменным. В итоге массив данных хранится в файле и считывается очень удобным образом. Удобнее базы данных, так как конфиги можно править в блокноте.
-
@fox пример строчек конфига:
#Настройки прокси:
VAR_AR_ACCOUNT_PROXY: http,185.232.168.40:9172,aAz6A7,FoP1fZ
#Имя аккаунта:
VAR_AR_ACCOUNT_NAME: David Miller
#Логин аккаунта:
VAR_AR_ACCOUNT_LOGIN: miller.david2015@yandex.ru
#Пароль аккаунта
VAR_AR_ACCOUNT_PASSWORD: K72+r/Q8iljkhz0r6B
#Accept-Language аккаунта
VAR_AR_ACCOUNT_LANGUAGE: ru-RU,ru;q=0.6,en-US,en;q=0.6
#User-Agent аккаунта
VAR_AR_ACCOUNT_USERAGENT: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 YaBrowser/18.6.1.770 Yowser/2.5 Safari/537.36
И так далее... Ещё fibgerprint туда же запихнул и кучу логинов-паролей для разных сайтов, завязанных на этот профиль. -
@Pragmatik Прикольно, BAS работает по схожему принципу
:D
Я прибегаю к работе с файлами в отладочных версиях скрипта. Для быстрого теста необходимых узлов.
Но объявлять переменные в конфиге черевато, так как дальше по скрипту ты эти переменные используешь, возможны ошибки.
Хотя всё зависит от цели самого скрипта
-
@Pragmatik Или у тебя переменные уже объявлены, а значение из файла ищется по имени переменной?
-
@fox да в том-то и беда, что через eval невозможно объявить переменную чтобы она с нуля появилась в БАС. Я тупо считываю эти значения и через if подставляю нужной переменной нужное значение. Там же, в коде с if эти переменные впервые и появляются. Очень неудобно, если честно. Если бы был безопасный способ создать переменную через код, было бы круто, может ещё реализуют.
-
@pragmatik Храните свой конфиг в json в виде объекта и делов
-
@denis_krsk said in Не подставляется переменная в регулярку:
Храните свой конфиг в json в виде объекта и делов
Предлагаете преобразовать файл в json или же сам массив данных из файла для хранения в переменной?
Я о таком не задумывался потому, что у меня в конфиге fingerprint хранится, а он уже в формате json. Json в json наврятли можно пережать.
Впрочем, с такой идейкой можно и два файла сделать, один для конфигурации, второй для слепка браузера.
-
@pragmatik Если уж вы выбрали такой подход к хранению данных, то json самое правильное решение. JSON способ передачи объектов в виде строки. Потому вам некто не мешает создать сколько угодно сложный объект и хранить в нем все, в том числе и фингер принт.
например:var config={ name:'Ivan' commens:[ 'hi', 'way' ], finger:fingerprint } //Потом в json var json=JSON.stringify(config); //Затем его записываете в файл //А после чтения var json=JSON.parse(file); //А потом распарсиваете его свойства var name=json.name; var commens=json.commens; var finger=json.fingerprint;
