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



  • @Fox Спасибо за совет. Вы это количество меняете в интерфейсе? 0_1500740250947_neud.PNG



  • @romanbiz Эмм, а зачем тебе менять количество успешных выполнений? Ты же говорил про ошибку в ошибочных выполнениях.



  • @Fox Я просто для теста менял, вот записал что у меня когда 3 потока, 3 успешных, 1 неудача
    http://i.imgur.com/BNFWgpG.gifv



  • @romanbiz Гифка зло.. Нужная информация вконце анимации, которая циклически воспроизводится по новой.

    У тебя даже на гифке вконце всё работает правильно. Ты выставляешь 3 потока, успешное выполнение функции 3 раза, неудачное выполнение 1 раз для !всех! потоков вместе. А не для каждого по 3.
    То есть выставив значение 5, у тебя отработают два раза 2 поток, два раза 3 поток, и один раз 4 поток.



  • Или я что то путаю..
    3 потока, 1 успешное, 1 неуспешное.

    [00:15:42] Поток №2 : поток спарсил
    [00:15:44] Поток №4 : поток спарсил
    [00:15:44] Поток №3 : поток спарсил
    [00:15:44] Поток №1 : готово.
    

    3 потока, 2 успешных, 1 неуспешное

    [00:17:34] Поток №2 : поток спарсил
    [00:17:39] Поток №3 : поток спарсил
    [00:17:40] Поток №2 : поток спарсил
    [00:17:40] Поток №4 : поток спарсил
    [00:17:40] Поток №1 : готово.
    

    3 потока, 3 успешных, 1 неуспешное

    [00:19:11] Поток №2 : поток спарсил
    [00:19:18] Поток №4 : поток спарсил
    [00:19:23] Поток №4 : поток спарсил
    [00:19:23] Поток №2 : поток спарсил
    [00:19:25] Поток №3 : поток спарсил
    [00:19:25] Поток №1 : готово.
    

    3 потока, 10 успешных, 1 неуспешное

    [00:21:05] Поток №4 : поток спарсил
    [00:21:05] Поток №2 : поток спарсил
    [00:21:06] Поток №3 : поток спарсил
    [00:21:12] Поток №2 : поток спарсил
    [00:21:13] Поток №4 : поток спарсил
    [00:21:18] Поток №2 : поток спарсил
    [00:21:19] Поток №3 : поток спарсил
    [00:21:20] Поток №4 : поток спарсил
    [00:21:28] Поток №4 : поток спарсил
    [00:21:30] Поток №2 : поток спарсил
    [00:21:32] Поток №3 : поток спарсил
    [00:21:35] Поток №4 : поток спарсил
    [00:21:35] Поток №1 : готово.
    

    Получается каждый поток отрабатывает хотя бы один раз, а потом считают общее количество успешных выполнений.. странно.



  • @Fox Ничего не понимаю.
    Выставляю 3 потока, 3 успеха, 1 неудача

    Результат:

    [574710937] [22:23:18] Поток №4 : поток спарсил
    [574710937] [22:23:34] Поток №2 : поток спарсил
    [574710937] [22:23:34] Поток №3 : поток спарсил
    [574710937] [22:23:38] Поток №2 : поток спарсил
    [574710937] [22:24:02] Поток №4 : поток спарсил
    

    Почему так? Что произошло? Почему 2 и 4 потоки повторились?

    Я понимаю что плаваю в самой логике работы успешных и неудачных выполнений и хочу на конкретном примере понять в чем суть. Помогите, пожалуйста.



  • @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 у меня не возникает лишних результатов. Все работает как мне надо и в многопотоке. И эта логика меня ставит в тупик.


Log in to reply
 

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