@Fox Получилось! Спасибо большое!)
Объясните почему должно быть так, а получается по другому)
-
Начну из далека, а потом ближе к своей проблеме
Есть такой блок к БАС "Вызов функции в несколько потоков". Приведём сразу пример. Вот я создал этот кубик в Main и вызываю функцию, назовем её asdf, в 2 потока с параметрами 10 успешных выполнений или 10 неуспешных выполнений.

В самой этой функции 3 действия:

То есть, как работает вообще многопоток. Запускается один или несколько, в зависимости от наших предпочтений, основной поток, например Поток№1, который в свою очередь запускает Поток№2 и Поток№3, то есть два второстепенных(наш случай), а сам в свою очередь уходит в бездействие, пока эти второстепенные потоки не закончат свою работу. Вроде я правильно описал работу многопотока
Вернемся к нашему случаю. Запустим этот скрипт в 2 потока(тобишь основных) и вот к чему это приводит:

В приципе всё понятно. Понятно почему выполнилось 22 раза, по 11 раз на каждый основной поток, хоть и стояло 10, если кому непонятно то вот https://community.bablosoft.com/topic/15195/вызов-функции-в-несколько-потоков-запутался/4?_=1689769190676
Самая главная суть, что основной поток завершается по достижении 10 успешных выполнений в сумме по второстепенным потокам. То есть например Поток№3, который является второстепенным потоком основного потока Поток№1, может выполниться 3 раза успешно, а Поток№4, который также является второстепенным от Потока№1, может выполниться оставшиеся 7 раз успешно.
Если в функции asdf убрать блок Success, ничего не измениться, лишь измениться сообщение с "йцукен" на "". В принципе всё понятно.Если выставить в Типе запуска "Повторять", то по завершении исполнения всех второстепенных потоков и их следствия завершения основного потока запуститься скрипт заново:

Тоже всё понятно. То есть пока не завершатся второстепенные потоки и их основной поток, скрипт не начнет их(второстепенные потоки) заново запускать.Вроде бы работу блока "Вызов функции в несколько потоков" я описал правильно.
Теперь переходим к моей проблеме.
Вначале постараюсь объяснить что есть в моем скрипте:
Скриншот№1
Скриншот№2
Скриншот№3
В остальных if(где происходит распределение по номеру потока) всё похоже, но берутся другие сайты и другие ресурсы используютсяСуть моего скрипта, будем разбирать режим "Spammer", потому что с ним у меня и основная проблема. Внутри функции "[Название сайта]Spam" из ресурса "Аккаунты" берется строка с логином:паролем, авторизуется на сайте, и начинает спам по юзерам,id которых также находятся в ресурсе "Users". И так для каждого сайта, распределенного по Номеру основного потока, то есть IF [[THREAD_INDEX]]==1 - то поток переходит в функции связанные с сайтом№1 и тд. (понимаю, что идей как это реализовать структуру лучше много, но мне удобно так)
Попрошу обратить внимание на разницу скриншотов №2 и №3.
На скриншоте №2 основной поток не создает второстепенные в режиме "Spammer", а работает сам. Связано это с тем, что интервал отправки сообщения маленький, и пройти по 40 строкам логинов:паролей из ресурса "Аккаунты" в цикле, пока закончаться эти строки, поток может быстро, поэтому нет смысла нагружать систему запуском нескольких потоков.
*На скриншоте №3 * основной поток в режиме "Spammer" создает несколько потоков, в моем случае 10 с 1000 успешными/неуспшеными выполнениями. В ресурсе "Аккаунты" от этого сайта находятся также 40 строк логин:пароль, поэтому число 1000 было написано наобум, хоть можно было бы написать 40, чего хватило бы чтоб пройтись по всем аккаунтам. Но не суть важно. Почему я запускаю здесь несколько потоков, думаю объяснять не надо, но на всякий случай. Связано это с большим интервалом отправки сообщения. Чтобы здесь пройти по 1ому циклу(по одному аккаунту) требуется 1 час, и если бы работа была в однопотоке то на это ушло бы 40 часов(а есть где один цикл занимает 6 часов, то это вообще опа). По этому на этот сайт был выбран блок "Вызов в несколько потоков", чтоб по идеи пройтись по всем акаунтам за 4 часа (1ч4 цикла по 10 аккаунтов за раз)И получается в работе у меня 8 сайтов, где 5 из них работают в однопотоке(в основном тобишь) и 3 других запускаются в несколько потоков. В сумме должно работать 45(1+1+1+1+1+20+10+10) потоков.
Как работу скрипта вижу я. Тип запуска "Повторять" дефает потоки, которые работают в однопоток, от непредвиденных ошибок во время работы и их дальнейшей остановки. Количество успешных/неуспешных выполнений в число 1000 дефает от ошибок и остановки потоки, которые запускаются в многопоток. И единственное от чего могут остановиться потоки - это когда закончатся строки в ресурсе "Аккаунты" для каждого сайта. Где в каждом таком ресурсе для каждого сайта 40 строк
А как работает у меня скрипт на самом деле:
- Один или несколько из основных потоков, который работает в соло, может просто с ничего завершиться(с ошибкой или даже без) пройдя по, например, 7 строкам аккаунтов, хоть в ресурсе будет написано что осталось 33. Причем остальные соло-потоки могут пройтись по всем и логично завершить работу, когда строк аккаунтов не осталось в ресурсе.
- Основные потоки, которые запускают второстепенные потоки (для удобства буду писать поток-многопоток). Один из них может пройти по 20 строчкам аккаунтов и закончить работу, отписав также что их основной поток завершил работу(при этом видно в отчете о ресурсах, что аккаунты еще есть). Другой может, например, также пройтись по 20 строчкам закончить работу, при этом основной поток не завершиться и будет просто висеть где-то в небытие. Третий может и вовсе завершиться сразу после прохождения первых 10 строчек не перейдя даже к следующим, то есть успешных выполнений 10 из 1000, но он всё равно завершился, хоть и осталось в ресурсе 30 аккаунтов. Как итог за неделю таких запусков, НИ РАЗУ потоки-многопотоки не завершили свою работу пройдя ПОЛНОСТЬЮ по всем аккаунтам.
Я не спроста привёл первые легкие примеры с блоком "Вызов функции в несколько потоков", чтобы показать, как вообще должен работать этот блок и как это вижу я. Да, там нет использования ресурсов и сама функция не такая большая, как те, которые используются в работе. Но всё же суть работы этого блока должна быть одинакова
И кто уже прочел до этого момента, я вас уже очень ценю)
Проблему вы мою услышали и прочли. В чём заключаются мои вопросы:
- Почему у меня так происходит? Почему потоки невиданным образом завершаются, когда они, по идеи, не должны?
- Подскажите пожалуйста как можно исправить эту проблему, чтобы она не повторялась, и скрипт прорабатывал все строки и завершал работу через 10+- часов, как он должен это делать по моим подсчетам
- Может дело в самих ресурсах или их параметрах, может в ресурсе прокси(о котором я забыл упомянуть), может в выставлении Типа запуска на "Повторять", может в выставлении количества успешных/неуспешных выполнений. Я просто уже не знаю куда мне копать, чтобы решить эту проблему и спокойно запускать скрипт без нервотрепок. Больше недели сижу и не понимаю почему так, когда должно быть по другому?
Я постарался максимально детально рассказать о своей проблеме, чтобы вы поняли всю суть, ход моих мыслей, мою идею, мой скрипт и тд. Я понимаю, что это слишком много, и мало кто это прочтёт, но я жду хоть какой-то фидбек по моей проблеме. Спасибо за внимание