@Fox Привет.Я описывал задачу в этой теме https://community.bablosoft.com/topic/27417/вызов-многопоточной-функции
Дело в том,что я не могу вообще никак перевести свой скрипт на многопоток,у меня тупо,что в вызове функции в многопоток,что просто обычный многопоток,выполняет свою работу с данными по очереди,а не одновременно.И это очень сильно бьет по времени,а нужна именно скорость обработки.Все уже готово и скрипт рабочий полностью,но скорость обработки заставила воспользоваться многопотоком.Ранее,подобных проблем не замечал,а сейчас элементарную задачу не могу уже несколько дней решить.
Скрипт очень простой и работает без браузера вообще,в скрипте используется только одно взаимодействие с гет запросом.Пример скрипта я приложил в этой теме(но без запросов),он точно почти такой же,как и основа.
Логика такова:
1)Запускается скрипт (без всяких ресурсов изначально и данных) и создаются два ресурса.
2)Делается запрос на сайт,который обрабатывается в отдельной функции,т.е. обрабатывает полученные строки и записывает в ресурс.
3)Вызывается функция в несколько потоков,которая работает (должна работать) с каждой строкой из созданного ранее ресурса(уникальной)в отдельном потоке.Данные обрабатываются и записываются во второй ранее созданный ресурс.
4)Как только данные обработаны,ресурс переводится в список и список записывается в файл.Более ничего не делается.
-Сперва я думал,что проблема в создаваемых в ходе работы ресурсах,но нет.Создавал изначально ресурсы и то же самое было.
-Потом пробовал брать из файлов значения\потом создавать файлы по ходу и из них брать данные\сохранять напрямую пытался и.т.д
-Возможно думал стоят какие то ограничения из за слабого пк с 4 гб оперативы и взял сервер с 64 гб,но как обрабатывалась строка за 5 минут на моем пк,так же по скорости и на серваке.Ладно, с этим я уже ничего не поделаю из за регулярок в проекте,согласен.Но вот перевести на поток и хотя бы по 10 строк одновременно обрабатывать,очень бы помогло.А сейчас в любом случае,у меня,сколько бы потоков не выставил - работает все равно как один,просто по очереди разный поток берет свои данные(
Равномерное распределение ресурсов в многопотоке
-
Всем привет!
Стоит задача равномерного перебора строк из БД в многопоточном скрипте в цикле (пусть будет 20 потоков).
Задача осложняется двумя моментами:- Половина потоков должна работать по всем строкам из БД, а вторая половина - только по строкам с определенным признаком.
- БД периодически обновляется.
Проблемы:
- Сначала сделал через один ресурс, в который берется вся БД. А уже внутри цикла в скрипте просто пропускается (continue) часть строк по THREAD_INDEX < 10. Проблема: пропуск строки тоже считается за использование ресурса, итого проверки для THREAD_INDEX > 10 идут неравномерно.
- Хотел сделать 2 отдельных ресурса: вся БД и часть БД, чтобы первая и вторая половина потоков работали по разным ресурсам. Проблема: через интерфейс ресурсов нельзя выставить фильтры для строк из таблицы БД, только брать таблицу целиком. Тогда решил делать ресурсы через OnApplicationStart (чтобы по фильтру из БД его создать), но тогда ресурс не будет обновляться. Только один раз в начале скрипта.
Готового решения не прошу, просто накиньте пожалуйста мысли, в сторону чего можно смотреть для решения задачи.. Уже не знаю, как сделать :(
-
Я не очень хорошо понимаю ваше требование, но я вижу, что вы хотите фильтровать ресурсы по определенному условию.
Итак, у меня есть предложение.
В базе данных создайте еще один столбец.
Какие данные работают только с определенными свойствами, укажите имя в этом поле.
Таким образом, вы можете использовать «Получить Записи По Критерию» и использовать «Добавить фильтр», чтобы отфильтровать соответствующие условия.

-
А вы через какой модуль пробуете? Sql? База какая?
-
@BAS-Viet-Nam Я так и сделал в варианте №2. Два ресурса, один из полной БД, другой из БД по фильтру. Все это в OnApplicationStart. Но в таком случае ресурсы не обновляются.
-
@BAS-Viet-Nam база данных, из которой формируется ресурс, обновляется отдельно. Ресурс соответственно тоже должен обновляться вслед за БД.
-
@BAS-Viet-Nam оно так и было до недавного времени. Я просто брал строки из БД, перемешивал их внутри каждого потока и работал по ним. Но перемешивание дает плохую равномерность. Поэтому я хочу задействовать систему ресурсов с кол-вом одновременных использований =1, что даст равномерный многопоточный перебор всех строк из БД. Вот)