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

-
@hvrsh said in Непавильная работа счетчика успешных выполнений в многопотоке:
Есть один главный поток, который управляет запуском функции через кубик "Вызов функции в несколько потоков". В примере что на скрине настройка кубика такая : количество потоков 20, количество успешных повторений 5. Я расчитывал получить 20*5 проходок а в итогое получил тольок то что на скрине, только первый поток повторился 5 раз. все остальные по одному только. Знает кто-то решение?
Логика простая, есть общий счётчик, который считает количество "успешных" завершений поток, он прерывает действие, по достижению указанного количества. То есть указывается общее количество "успешных" и "неудачных" выполнений для всех потоков.
Решение простое, умножьте количество потоков на необходимое количество "успешных" выполнений
-
@hvrsh said in Неправильная работа счетчика успешных выполнений в многопотоке:
@UserTrue я хотел чтобы он каждый поток поторил нужное колов раз. к примеру 20 потоков по пять повторений на каждый
Для чего именно вам это нужно? Что делают потоки и почему каждому нужно выполнить работу ограниченное количество раз?
-
@Fox поток делает роботу, за один проход может не сделать все, поэтому хотел чтобы можно было установить количество попыток чтобы он попытался сделать все что нужно. Если выставлять количество повторений не в кубике а в самом проекте то в принипе работает так как надо(повторяет нужно количесто раз потоки с функции), но там один нюанс что пока все потоки функции не пройдут, новое повторение не включится и полчается безполезная трата времени на ожидание прохождения всех потоков что в функции.
-
@hvrsh said in Неправильная работа счетчика успешных выполнений в многопотоке:
@Fox поток делает роботу, за один проход может не сделать все
- вынеси логику потока в функцию: threadMainWork
- функция threadMainWork должна возвращать результат: выполнила ли она до конца работу
- в функции Main вызывай в цикле threadMainWork и проверяй результат работы, при необходимости повторяй
Можно вызывать функцию threadMainWork синхронно или асинхронно.
-
@hvrsh said in Неправильная работа счетчика успешных выполнений в многопотоке:
@sergerdn Спасибо. не стал городить ничего. Закинул просто в цикл For тело где идет работа. Результат тот же по сути.
Да, можно и так - это у меня привычка клепать функции/классы/абстракции.
