@Fox Привет.Я описывал задачу в этой теме https://community.bablosoft.com/topic/27417/вызов-многопоточной-функции
Дело в том,что я не могу вообще никак перевести свой скрипт на многопоток,у меня тупо,что в вызове функции в многопоток,что просто обычный многопоток,выполняет свою работу с данными по очереди,а не одновременно.И это очень сильно бьет по времени,а нужна именно скорость обработки.Все уже готово и скрипт рабочий полностью,но скорость обработки заставила воспользоваться многопотоком.Ранее,подобных проблем не замечал,а сейчас элементарную задачу не могу уже несколько дней решить.
Скрипт очень простой и работает без браузера вообще,в скрипте используется только одно взаимодействие с гет запросом.Пример скрипта я приложил в этой теме(но без запросов),он точно почти такой же,как и основа.
Логика такова:
1)Запускается скрипт (без всяких ресурсов изначально и данных) и создаются два ресурса.
2)Делается запрос на сайт,который обрабатывается в отдельной функции,т.е. обрабатывает полученные строки и записывает в ресурс.
3)Вызывается функция в несколько потоков,которая работает (должна работать) с каждой строкой из созданного ранее ресурса(уникальной)в отдельном потоке.Данные обрабатываются и записываются во второй ранее созданный ресурс.
4)Как только данные обработаны,ресурс переводится в список и список записывается в файл.Более ничего не делается.
-Сперва я думал,что проблема в создаваемых в ходе работы ресурсах,но нет.Создавал изначально ресурсы и то же самое было.
-Потом пробовал брать из файлов значения\потом создавать файлы по ходу и из них брать данные\сохранять напрямую пытался и.т.д
-Возможно думал стоят какие то ограничения из за слабого пк с 4 гб оперативы и взял сервер с 64 гб,но как обрабатывалась строка за 5 минут на моем пк,так же по скорости и на серваке.Ладно, с этим я уже ничего не поделаю из за регулярок в проекте,согласен.Но вот перевести на поток и хотя бы по 10 строк одновременно обрабатывать,очень бы помогло.А сейчас в любом случае,у меня,сколько бы потоков не выставил - работает все равно как один,просто по очереди разный поток берет свои данные(
Как получить номер используемой строки ресурса в многопоточной функции?
-
Например, имеется ресурс из 10 строк {{RES}}:
строка1
строка2
...
строка10Функция выполняется в 2 потока. Потоки берут данные из ресурса последовательно и неограниченное число раз (по кругу).
Т.е.:
поток1 работает над строка1
поток2 работает над строка2
поток1 работает над строка3
поток2 работает над строка4
...
Затем, по достижению последней строки ресурса, потоки берут данные из ресурса повторно, начиная со "строка1".
поток1 работает над строка1
поток2 работает над строка2
и т.д.
Мне нужно в каждом потоке получить из ресурса номер строки, которая используется в данный момент. Как это сделать?Версия BAS 23.2.2
-
@botovod said in Как получить номер используемой строки ресурса в многопоточной функции?:
Или придется "прикручивать костыли", что-то наподобие: "преобразовать ресурс в список - получить индекс элемента списка по значению строки из ресурса"?
Yes. You can do Read File To List and then Get Index with:
Variable With List: [[LIST_WITH_FILE_CONTENT]]
Value: {{RES}}If the resource doesn't change during runtime, you can put Read FIle to List in the OnApplicationStart function and convert the variable into a global variable.
If the resource changes during runtime, you need to reload the resource, Read File to List after the resource has been reloaded and convert it to a global variable.Да. Вы можете выполнить Read File To List и затем Get Index с помощью:
Variable With List: [[LIST_WITH_FILE_CONTENT]].
Значение: {{RES}}.Если ресурс не меняется во время выполнения, вы можете поместить Read FIle to List в функцию OnApplicationStart и преобразовать переменную в глобальную переменную.
Если ресурс изменяется во время выполнения, необходимо перезагрузить ресурс, Read File to List после перезагрузки ресурса и преобразовать его в глобальную переменную. -
@simplyx said in Как получить номер используемой строки ресурса в многопоточной функции?:
Если ресурс не меняется во время выполнения, вы можете поместить Read FIle to List в функцию OnApplicationStart и преобразовать переменную в глобальную переменную.
Я могу создать глобальную переменную, содержащую список, но я не могу выбрать эту глобальную переменную при создании действия "получить Индекс" в разделе "Список".

Чтобы эта идея с преобразованием в список работала, пришлось преобразование ресурса в список выполнять внутри многопоточной функции (в каждом потоке). Это действие позволит сохранить результат в локальную переменную, из которой можно легко получить индекс строки в каждом конкретном потоке.
Но почему в действии "получить Индекс" (см. картинку) недоступны глобальные переменные (их просто нет в списке для выбора) мне не понятно!