Но появилась новая проблема. Иногда скрипт во время работы внезапно запрещает выделять действия. Т.е при клике на любое действие, оно просто не выделяется красным. Это второй баг, независимый от первого если что
Thread ended with message "All data have been processed for ..."
-
@Fox said in Thread ended with message "All data have been processed for ...":
@gaget007 said in Thread ended with message "All data have been processed for ...":
Проверять кол-во элементов в ресурсе, при 0 завершать поток
У него на скриншоте такая логика и изображена
Единственное, что приходит в голову, это:
- запускать скрипт в одном потоке
- вручную управлять логикой, исполняя основной код с помощью Call function asynchronously
- также вручную управлять запуском новых потоков
- вручную отслеживать статус их выполнения с помощью Get async function result
- etc
Это позволит мне не запускать новый поток в асинхронной функции, если в ресурсе нет данных дня него, так как я управляю всем вручную.
Вообщем не тривиально.
-
Пока не найдено "красивое" решение, я внедрил обходной путь.
- Запускаю скрипт в одном потоке
- Отказался от использования в коде основной логики обращение к ресурсу за данными.
- Запускаю код логики в асинхронной функции с параметром, а не получаю данные из ресурса. Параметр получаю в основном потоке, преобразовав все данные из ресурса в LIST и итерируюсь по ним в цикле.
- В основном потоке в конце логики дожидаюсь пока все асинхронные функции завершат свою работу
Мне пришлось в коде основной логики все равно обращаться к ресурсу, чтобы считалась правильно статистика Resource Report.
Как побочный эффект, я получил уникальную нумерацию потоков, что облегчит любой дебаг в будущем.
Теперь все красиво:

Данные прикладываю:
bug_report_fix_1.zip -
@gaget007 said in Thread ended with message "All data have been processed for ...":
Run Type - Repeat. Может по этому скрипт перезапускается?
Скрипт не перезапускается.
Задача как раз стоит запускать новые потоки, пока есть доступные данные в ресурсе:
Script will be constantly repeated infinitely or until data for any resource will be exhausted, or until "End Script" will be executed.Проблема в том, что BAS сначала запускает поток, потом проверяет есть ли ресурсы и далее передает управление моему коду.
Если ресурсов нет, то завершает поток с ошибкой до передачи управления моему коду.Вероятно, BAS должен проверить наличие ресурсов до запуска потока и не запускать его вовсе, если ресурсы пустые.
-
Не могу понять пока в чем проблема, было лень скачивать и набросал всё то же, и у меня результат такой


По опыту эта проверка всегда в момент обращения к ресурсу, тоесть там может быть 5 минут работы потока и когда он обратится к ресурсу - только тогда будет прерван скрипт.
Сейчас скачаю скрипт что бы попробовать понять что не так -
@DrPrime said in Thread ended with message "All data have been processed for ...":
По опыту эта проверка всегда в момент обращения к ресурсу, тоесть там может быть 5 минут работы потока и когда он обратится к ресурсу - только тогда будет прерван скрипт.
Нет, я написал скрипт, который демонстрирует, что BAS проверяет есть ли в ресурсе данные ДО запуска самого кода в потоке, то есть ДО обращения к ресурсу, который пустой.
@DrPrime said in Thread ended with message "All data have been processed for ...":
Сейчас скачаю скрипт что бы попробовать понять что не так
Проблема с каким сообщением скрипт закончил работу, у тебя он так же, как и у меня закончил с ошибкой.
-
@DrPrime said in Thread ended with message "All data have been processed for ...":

вот причина, на момент проверки ресурсы есть - в момент получения остальные потоки завершили работу и ресурс удалился.
Предположение о проверке до запуска потока развенчано
Ок, не вопрос, предположу, что ты прав и BAS работает не так, как я написал выше.
Как избежать такого? Цель поста НЕ выяснить почему BAS так себя ведет, а выяснить как сделать так, чтобы скрипт не завершался с ошибкой.
-
@DrPrime said in Thread ended with message "All data have been processed for ...":
можно так же вручную удалять ресурсы что бы быстрее обновлялась инфа о свободных ресурсах
Проблема удаления из ресурса в том, что даже если ресурс настроен как только для чтения, BAS файла удаляет из файла данные, а это мне не нужно.
-
@DrPrime said in Thread ended with message "All data have been processed for ...":
Удаляй без галочки, он просто удалит его из системы ресурсов
Спасибо большое, я решил свою проблему.
Изначально у меня была проблема в том, что когда я смотрел на логи, несмотря на то, что в логах был номер кубика, я прошляпил этот момент и строил гипотезы, которые ни на чем не основаны.
Также, я прошляпил галку при удалении ресурса, чтобы он не сносил его с файла, я тестировал этот вариант, зачем я все время ставил галку - сам не знаю. И еще сидел удивлялся какого фига файл очищается в конце работы.
Ниже комбинация кода, которая заставляет BAS обновлять информацию о ресурсе мгновенно, а не когда поток завершит свою работу.


P.S.
Глобальный вывод из этого топика, что я сделал - надо отдыхать. -
@sergerdn said in Thread ended with message "All data have been processed for ...":
Задача как раз стоит запускать новые потоки, пока есть доступные данные в ресурсе:
Я наподобие такого делал так. Создал асинхронную функцию с лимитом в 1 поток, которая в бесконечном цикле запускала импорт аккаунтов в базу.
Режим запуска - "Повторять".
Пока акки есть в базе, потоки их берут. Когда их нет, скрипт просто в бесконечном же цикле их ожидает.
-
@thepappo said in Thread ended with message "All data have been processed for ...":
@sergerdn said in Thread ended with message "All data have been processed for ...":
Задача как раз стоит запускать новые потоки, пока есть доступные данные в ресурсе:
Я наподобие такого делал так. Создал асинхронную функцию с лимитом в 1 поток, которая в бесконечном цикле запускала импорт аккаунтов в базу.
Режим запуска - "Повторять".
Пока акки есть в базе, потоки их берут. Когда их нет, скрипт просто в бесконечном же цикле их ожидает.
Спасибо, что поделился.
У меня основная проблема была - "я смотрел в книгу, а видел фигу"@sergerdn said in Thread ended with message "All data have been processed for ...":
Изначально у меня была проблема в том, что когда я смотрел на логи, несмотря на то, что в логах был номер кубика, я прошляпил этот момент