Написал многопоточный скрипт, но работает непонятно с неудачами



  • @romanbiz Для чистоты эксперемента, я создал нулёвый тестовый скрипт, с одним лишь экшеном лог. Запустил его в 3 потока, 3 успеха и 3 неудачи. Результат:

    [370212654] [00:28:10] Поток №1 : поток спарсил
    [00:28:10] Поток №1 : Поток выполнен успешно с сообщением "Ok"
    [370212654] [00:28:10] Поток №1 : поток спарсил
    [00:28:10] Поток №1 : Поток выполнен успешно с сообщением "Ok"
    [370212654] [00:28:10] Поток №1 : поток спарсил
    [00:28:10] Поток №1 : Поток выполнен успешно с сообщением "Ok"
    [370212654] [00:28:10] Поток №2 : поток спарсил
    [00:28:10] Поток №2 : Поток выполнен успешно с сообщением "Ok"
    [370212654] [00:28:10] Поток №3 : поток спарсил
    [00:28:10] Поток №3 : Поток выполнен успешно с сообщением "Ok"
    [00:28:10] Скрипт завершен корректно
    

    Точно так же, 5 запусков. Получается формула:
    количество потоков плюс успешных выполнений минус 1.
    Сейчас обмазгую почему так..



  • Опытным путём подтверждаю формулу успешных выполнений, если количество потоков больше 1, то:
    количество потоков плюс успешных выполнений минус 1.



  • @Fox Можете помочь понять логику? Мне казалось что если нет неудачных выполнений в процессе выполнения скрипта, то не будет менятся количество успешных в результате, вне зависимости прописано в настройках наличие неудачных выполнений числом больше 0 или равно 0.

    Пример, 3 человека бегут марафон. При этом допускается что если кто-то в процессе упадет и сломает ногу возможна 1 замена. В результате к финишу придут 3, даже если была 1 замена. Но вдруг приходят 5. Это непонятно.



  • @romanbiz Количество неудачных выполнений ни как не влияет на количество успешных, только что проверил на тестовом скрипте. Хоть -1, хоть 0, хоть 10. При 3 потоках, 3 успешных выполнений, всегда выдаёт 5 результатов. Как по формуле выше.

    Я тоже писал выше, что немного непонятно. Я вообще не использую параметры успешных выполнений и неудачных выполнений. Да и вызов функции в несколько потоков использую крайне редко.
    Для решении твоей задачи, подойдёт формула выше. А по самой логике и вопроса почему так происходит, скорей всего ответит только @support .



  • @Fox Я тоже проверил в тестовом скрипте не влияет. А вот в моем влияет.

    3 потока 3 успеха 0 неудач

    [574710937] [23:01:41] Поток №2 : поток спарсил
    [574710937] [23:01:42] Поток №3 : поток спарсил
    [574710937] [23:01:42] Поток №4 : поток спарсил
    

    3 потока 3 успеха 1 неудача

    [574710937] [23:03:05] Поток №4 : поток спарсил
    [574710937] [23:03:05] Поток №2 : поток спарсил
    [574710937] [23:03:07] Поток №3 : поток спарсил
    [574710937] [23:03:12] Поток №4 : поток спарсил
    [574710937] [23:03:12] Поток №2 : поток спарсил
    

    Причем результат по количеству постоянный и там и там. Я сначала подозревал может не подгружается где-то поток. Но такая картина постоянно.



  • @romanbiz все очень просто. 1 поток отработал - успех +1, перезапустился, второй отработал, успех +1, перезапустился, третий о работал, успех +1, не перезапустился потому что количество успехов достигнуто. Первый и второй работают дальше, отработают, увидят что успехи достигнуты и не будут перезапускаться. Это сделано для того что бы не потоки не закрывались посередине работы, что бы не потерять ресурсы (почты, мобильные номера, капчи и т.д.)



  • Сделал в тестовом скрипте вызов функции в несколько потоков:

    3 потока, 3 успешных, 0 неудачных.

    [01:09:09] Поток №1 : Начало.
    [01:09:09] Поток №2 : поток спарсил
    [01:09:09] Поток №3 : поток спарсил
    [01:09:09] Поток №4 : поток спарсил
    [01:09:09] Поток №1 : Готово.
    

    3 потока, 3 успешных, -1 неудачных.

    [01:09:56] Поток №1 : Начало.
    [01:09:56] Поток №2 : поток спарсил
    [01:09:56] Поток №2 : поток спарсил
    [01:09:56] Поток №2 : поток спарсил
    [01:09:56] Поток №3 : поток спарсил
    [01:09:56] Поток №4 : поток спарсил
    [01:09:56] Поток №1 : Готово.
    

    Получается, если выставить количество неудач 0, то потоки отрабатывают нормально, но только 1 раз.

    3 потока, !10! успешных, 0 неудачных.

    [01:14:32] Поток №1 : Начало.
    [01:14:32] Поток №2 : поток спарсил
    [01:14:32] Поток №3 : поток спарсил
    [01:14:32] Поток №4 : поток спарсил
    [01:14:32] Поток №1 : Готово.
    


  • @romanbiz 0 неудач зачем ставить? Это вообще вроде не предусмотрено в бас



  • @DrPrime Привет DrPrime. Я тоже сперва думал, что нельзя выставить 0.. Но оказалось можно. Если скажем оставить имя переменной в любом экшене пустым, то BAS не даст использовать его. А выставить количество неудачных выполнений в 0 даёт..
    На счёт логики согласен, и формула подходит )).



  • @Fox я имею ввиду то как бас реагирует на этот 0



  • @DrPrime Спасибо за ответы. Понял, количество неудач равные 0 использовать не буду. Возникает вопрос. Я задаю 2 потока 4 успеха, N неудач.
    В результате получаю стабильно 5 результатов. Почему 5? Откуда 5?

    [574710937] [23:32:27] Поток №2 : поток спарсил
    [574710937] [23:32:31] Поток №2 : поток спарсил
    [574710937] [23:32:35] Поток №2 : поток спарсил
    [574710937] [23:32:39] Поток №2 : поток спарсил
    [574710937] [23:32:45] Поток №3 : поток спарсил
    
    [574710937] [23:34:58] Поток №3 : поток спарсил
    [574710937] [23:34:58] Поток №2 : поток спарсил
    [574710937] [23:35:03] Поток №3 : поток спарсил
    [574710937] [23:35:04] Поток №2 : поток спарсил
    [574710937] [23:35:07] Поток №3 : поток спарсил
    


  • @romanbiz У меня тестовый скрипт вызова функции в 2 потока и 2 успешных выполнений, всегда выдаёт 3 результата.

    [485290703] [01:36:02] Поток №1 : Начало.
    [621883604] [01:36:02] Поток №2 : поток спарсил
    [621883604] [01:36:02] Поток №2 : поток спарсил
    [621883604] [01:36:02] Поток №3 : поток спарсил
    [381431811] [01:36:02] Поток №1 : Готово.
    

    Проект.xml



  • @Fox Извините, была опечатка, 2 потока 4 успеха.



  • У меня складывается впечатление что многопоточность это такой арт обстрел по данным, где нельзя гарантировать конечный результат? И что если я хочу обойтись без дублей, я должен либо в 1 поток делать, либо потом зачистку реализовывать? Так как если работаю в несколько потоков с ненулевым количеством неудач, не получается укладываться в ровное количество результатов, которые я хочу получить?
    В то же время если я выставляю количество неудач=0 у меня не возникает лишних результатов. Все работает как мне надо и в многопотоке. И эта логика меня ставит в тупик.



  • @romanbiz Я везде работаю с многопотоком, всё работает чётко и по замыслу. Но ни где не пользовался успешными и неудачными выполнениями. Ведь всё можно организовать в логике скрипта.

    Для вашей задачи подойдёт формула выше:

    если количество потоков больше 1, то:
    количество потоков плюс успешных выполнений минус 1.

    Выставите скрипт в 3 потока, !100! успешных выполнений и 0 неудачных. Скрипт выдаст только 3 результата.
    Как писал выше @DrPrime скорее всего 0 неудачных выполнений не предусмотрено в BAS.



  • @Fox спасибо за формулу. Буду тестировать. Ну когда я выставлял количество потоков равное количеству успехов и 0 неудач вроде нормально работало.



  • @Fox дополнение к Вашей формуле, количество успешных выполнений тоже должно быть >1.
    Так как в случае 3 потока, 1 успех, 1 неудача получается:

    [574710937] [00:12:38] Поток №4 : поток спарсил
    [574710937] [00:12:38] Поток №2 : поток спарсил
    [574710937] [00:12:38] Поток №3 : поток спарсил
    


  • @romanbiz Вообще эти огороды можно не городить, если установить количество успехов РЕСУРСА с куда сохраняются ссылки на страницы в 1. И не будет никах проблем



  • @DrPrime поясните, пожалуйста, если несложно. Не понимаю что конкретно надо сделать и как это будет работать. Заранее спасибо.



  • @DrPrime Кажется понял. Если так сделать, то получается что каждую ссылку можно использовать только 1 раз. Таким образом повторно ее нельзя будет использовать, если ее уже взял один поток.


Log in to reply
 

Looks like your connection to Bablosoft was lost, please wait while we try to reconnect.