@Fox Привет.Я описывал задачу в этой теме https://community.bablosoft.com/topic/27417/вызов-многопоточной-функции
Дело в том,что я не могу вообще никак перевести свой скрипт на многопоток,у меня тупо,что в вызове функции в многопоток,что просто обычный многопоток,выполняет свою работу с данными по очереди,а не одновременно.И это очень сильно бьет по времени,а нужна именно скорость обработки.Все уже готово и скрипт рабочий полностью,но скорость обработки заставила воспользоваться многопотоком.Ранее,подобных проблем не замечал,а сейчас элементарную задачу не могу уже несколько дней решить.
Скрипт очень простой и работает без браузера вообще,в скрипте используется только одно взаимодействие с гет запросом.Пример скрипта я приложил в этой теме(но без запросов),он точно почти такой же,как и основа.
Логика такова:
1)Запускается скрипт (без всяких ресурсов изначально и данных) и создаются два ресурса.
2)Делается запрос на сайт,который обрабатывается в отдельной функции,т.е. обрабатывает полученные строки и записывает в ресурс.
3)Вызывается функция в несколько потоков,которая работает (должна работать) с каждой строкой из созданного ранее ресурса(уникальной)в отдельном потоке.Данные обрабатываются и записываются во второй ранее созданный ресурс.
4)Как только данные обработаны,ресурс переводится в список и список записывается в файл.Более ничего не делается.
-Сперва я думал,что проблема в создаваемых в ходе работы ресурсах,но нет.Создавал изначально ресурсы и то же самое было.
-Потом пробовал брать из файлов значения\потом создавать файлы по ходу и из них брать данные\сохранять напрямую пытался и.т.д
-Возможно думал стоят какие то ограничения из за слабого пк с 4 гб оперативы и взял сервер с 64 гб,но как обрабатывалась строка за 5 минут на моем пк,так же по скорости и на серваке.Ладно, с этим я уже ничего не поделаю из за регулярок в проекте,согласен.Но вот перевести на поток и хотя бы по 10 строк одновременно обрабатывать,очень бы помогло.А сейчас в любом случае,у меня,сколько бы потоков не выставил - работает все равно как один,просто по очереди разный поток берет свои данные(
Баг ф-ции sleep в if условии
-
@agility в выполнить код. Вы зря лезете в это, если не понимаете, что делаете.
-
@agility В том, что у вас вызов стоит первым. Те функции, что вы создали в БАС идут где-то потом, откройте код скрипта и сами все уведите.
-
@usertrue Все равно не понял. У меня вызов функций выполняется в блоке действия "Выполнить код", который стоит после блока действия "Инициализация", где возможно и загружаются заранее все созданные функции.
Почему тогда функция Test1 выводит и BAS её видит, а Test2 нет? -
@agility Случайность. Еще раз говорю смотрите код. Если не понимаете что в нем, то бросайте это занятие.
-
@agility said in Баг ф-ции sleep в if условии:
@drprime Что-то опять мини-баг или я недопонял. Пишу такой код:
_if (1, function() { _call(Test1, null)! })! _if (1, function() { _call(Test2, null)! })!Мне ошибка:
ReferenceError: Can't find variable: Test2 во время выполнения действияЕсли только с одним _if делать, то все работает
А вы пробовали запускать скрипт?


тестовый скрипт
-
@agility said in Баг ф-ции sleep в if условии:
@fox Вот, ваш скрипт скачал, запустил и та же ошибка. Версия BAS последняя.

Вы скриншот приложили из режима "запись" а не "запуск"
-
@agility ...Создавайте функции сами в выполнить код,а не делайте их через кубик и тогда у вас не будет проблем. Вызов функций созданных в бас работает сейчас по не очень понятной логике, раньше работал нормально.
-
@fox said in Баг ф-ции sleep в if условии:
Вы скриншот приложили из режима "запись" а не "запуск"
Так смысл тогда в решении выше, что через "запуск" работает, а через "запись" нет. Я пишу шаблон и тестирую через "запись". Получается у меня теперь через "запись" не получится никогда тестировать шаблон.
@UserTrue А как вы через "выполнить код" пишите функции, если иногда требуется вызывать действия типа "Считать файл в списко", "Двигать мышь над элементов"? Они же там через api BAS'a криво выводятся.
-
@agility said in Баг ф-ции sleep в if условии:
@UserTrue А как вы через "выполнить код" пишите функции, если иногда требуется вызывать действия типа "Считать файл в списко", "Двигать мышь над элементов"? Они же там через api BAS'a криво выводятся.
Нормально они работают, если все делать правильно, но мне кажется я уже устал писать об этом. Не понятно зачем вызывать функций через апи бас, если нет понимания как с ним работать.
-
@agility said in Баг ф-ции sleep в if условии:
@fox said in Баг ф-ции sleep в if условии:
Вы скриншот приложили из режима "запись" а не "запуск"
Так смысл тогда в решении выше, что через "запуск" работает, а через "запись" нет. Я пишу шаблон и тестирую через "запись". Получается у меня теперь через "запись" не получится никогда тестировать шаблон.
А как бы вы хотели, чтобы в режиме "запись" ваш код отработал? Если у вас одним действием вызываются две разные функции:
_if (1, function() { _call(Test1, null)! })! _if (1, function() { _call(Test2, null)! })! -
@fox Мне нужно, чтобы Test1() выполнилось, затем Test2()
То есть последовательно
Там ведь везде стоит знак !, что означает ожидание завершение каждого действия - то есть последовательное выполнение
Я пока решаю этот вопрос разделением 1-го блока "Выполнить код" на несколько. Но это не удобно, если функций много -
@agility said in Баг ф-ции sleep в if условии:
@fox Мне нужно, чтобы Test1() выполнилось, затем Test2()
То есть последовательно
Там ведь везде стоит знак !, что означает ожидание завершение каждого действия - то есть последовательное выполнение
Я пока решаю этот вопрос разделением 1-го блока "Выполнить код" на несколько. Но это не удобно, если функций многоВы выполняете действие "выполнить код" и оно выполняется полностью прежде, чем перейдёт к другому действию. Так работает интерпретатор в режиме "запись".
То есть чтобы BAS выполнил сперва первую функцию, а затем вторую одним действием "выполнить код" вам нужно объявлять эти функции так же в "выполнить код".
-
@fox said in Баг ф-ции sleep в if условии:
То есть чтобы BAS выполнил сперва первую функцию, а затем вторую одним действием "выполнить код" вам нужно объявлять эти функции так же в "выполнить код".
А как так же объявить эти ф-ции в "выполнить код"?
В действии Выполнить код как я выше писал мне последовательно нужно выполнить 2 функции:
_if (1, function() { _call(Test1, null)! })! _if (1, function() { _call(Test2, null)! })!Функции заданы как стандартно задаются в басе:

Как их еще нужно задать, чтобы работало последовательно выполнение ф-ций в одном действии Выполнить код?
