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