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



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

    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 раз. Таким образом повторно ее нельзя будет использовать, если ее уже взял один поток.



  • @romanbiz да, именно так


Log in to reply
 

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