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