У меня такая же ошибка.
Помогает очистка cookies - тогда страница грузится. Но это очень странное решение. Пока решение не найдено
Thread ended with message "All data have been processed for ..."
-
Вероятно, я не до конца понимаю, как работают ресурсы.
Исходные данные:
- файл в виде ресурса LinesFromFile
- кол-во потоков
Я ожидаю, что BAS не будет стартовать новые потоки, если закончились данные в ресурсе, так как он "знает" в любой момент времени, что все данные из ресурса забраны или закончившимися работу потоками или потоками, что работают в данный момент времени.
Я же получаю, что после того, как для потоков не остается данных, потоки стартуют и заканчивают работу с ошибкой, что нет для них данных. Заканчивают потоки с ошибкой еще до выполнения кода скрипта. Вероятно, BAS проверяет ресурс на наличие данных в нем после старта потока и до начала выполнения кода в нем.
Не понимаю, как организовать логику таким образом, чтобы если в ресурсе не осталось данных, то поток не стартовал бы или "красиво" завершался без ошибки вида "Ended with message: All data have been processed for KeywordsFile".
Скрипт и данные для него прикладываю.
bug_report_1.zipСкриншоты:
UPDATE:
Решение ТУТДругой путь ТУТ
-
@gaget007 said in Thread ended with message "All data have been processed for ...":
Проверять кол-во элементов в ресурсе, при 0 завершать поток
У него на скриншоте такая логика и изображена
-
@gaget007 said in Thread ended with message "All data have been processed for ...":
Проверять кол-во элементов в ресурсе, при 0 завершать поток
Я так и сделал, только я завершаю весь скрипт, а не только текущий поток, о чем есть информация на скриншоте и в приложенном скрипте.
Также написал, что BAS проверяет наличие данных в ресурсе до исполнения кода скрипта, чтобы я там не делал, до моего кода не доходит.
-
@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 ...":
Изначально у меня была проблема в том, что когда я смотрел на логи, несмотря на то, что в логах был номер кубика, я прошляпил этот момент