Закрытие потока после выполнения задачи.



  • Добрый день. Ситуация есть 10 аккаунтов и заданно для каждого потока 1 аккаунт.

    Параметры: количество успеха 10, количество ошибок 5, потоков 10.

    Поток №1 закончил быстрее всех. И теперь опять стартует, но при этом аккаунтов уже нету, и соответственно выбивает ошибку, ну и дальше вся программа закрывается.

    Как сделать что бы при выполнении - поток полностью заканчивался, то есть стало 9, а не 10?
    Поможет ли в этом плане команда SUCCESS?



  • Не поможет. Мне этого тоже не хватает сильно. Экшн "Прервать поток" в дополнение к "Прервать скрипт" был бы полезен



  • @kibec Но в твоем случае, если брать ресурсы не вручную, то он не будет выбивать ошибку и прерывать скрипт, а дождется, пока остальные потоки не завершатся . Но в конце все равно прервется все ошибкой, что закончились ресурсы



  • @kibec Или поможет .... я вобщем вопрос не до конца понял, поэкспериментируй, пусть лучше support ответит ))))



  • Как сделать что бы !поток! заканчивался (финально, а не заново перезапускался), то есть было 10, стало 9.


  • administrators

    @lev Экшн "Прервать поток" называется fail

    @kibec Стало 9, а не 10 чего?



  • @support Хм, он именно прерывается, то есть было 5 потоков, а будет 4? Я просто до этого момента думал, что fail просто добавляет количество неудач .....


  • administrators

    @kibec Зачем ограничивать количество успехов в 10?
    Скрипт автоматом завершится когда закончатся строки


  • administrators

    Софт работает так:

    Запускается заданное количество потоков.
    Если один поток завершается с ошибкой - он тут же перезапускается и увеличивает количество ошибок.
    Тоже самое происходит с успехом.

    Скрипт завершается при одном из 4 условий -

    • Достигнуто макс количество успехов.
    • Макс количество неудач.
    • Использованы все ресурсы.
    • Вызвано "Прервать Скрипт"

    Действие Fail завершит поток с ошибкой и он будет тут же перезапущен.
    Исходя из этого можно реализовать практически любую логику



  • @support Ну вот я подразумевал, что Прервать поток - прерывает его и не запускает новый. Как то пару месяцев назад мы говорили на эту тему, когда у меня была задача взять сразу несколько строк из ресурсов одним потоком, и была проблема. Не всегда можно предсказать сколько fail и success будет в скрипте. С таким экшном было бы больше возможностей с ручным управлением ресурсами в многопотоке. Можно вручную всегда проверить сколько строк в ресурсе и если там 0 - то прервать поток и не перезапускать ...



  • @support И ни всегда красиво, когда приложение завершается ошибкой, что закончились ресурсы, с Прервать поток это можно отслеживать в самом скрипте. Но если это трудно реализуемо, то впринципе, я пользуюсь вашим решением, когда потоки не прерываются, а спят и ждут потока, который при определенном условии, через экшн Прервать скрипт, завершает приложение...



  • @support И вот если например выставить количество успехов в 10, и один из потоков достигнет этого количества успехов, то все потоки ведь разом прервутся? Соответственно, будут потеряны ресурсы, так как часть потоков уже возьмет часть аккаунтов, а в сложных шаблонах и где-нибудь их задействует ...


  • administrators

    @lev

    Не всегда можно предсказать сколько fail и success будет в скрипте.
    И вот если например выставить количество успехов в 10, и один из потоков достигнет этого количества успехов, то все потоки ведь разом прервутся?

    А почему не выставить количество успехов в большое число и не угадывать?


  • administrators

    Не обязательно прерывать поток, ему можно дать перезапуститься, он все равно застопориться на получении ресурса.



  • @support у меня пока 2 причины, где мне бы был полезен этот экшн "Прервать поток". 1 - ручное управление ресурсами (самому взять, записать, удалить). Без этого экшна все ручное управление ресурсами имеет смысл только в однопотоке. 2 - Завершать скрипт записью в лог, что все ок, а не стандартной красной фразой, что слишком много ошибок и ресурсы закончились.


  • administrators

    Если работаете со списком аккаунтом предлагаю такой сетап.
    Успехи, неудачи в 10000
    Потоки задает юзер.
    Завершение по исчерпанию ресурса.

    По сравнению с подходом предложенным в теме есть несколько преимуществ
    Можно динамически менять число потоков.
    Не нужно самостоятельно выставлять число успехов/неудач.


  • administrators

    @lev А как в этом поможет экшн который завершает поток и не дает ему восстановиться?
    Чем этот экшн будет отличаться от бесконечного сна?



  • @support От бесконечного сна ничем ни отличается, кроме того, что не тратятся ресурсы на паузу, ну и логика сложнее, так как надо вычислить последний поток, иначе они все в бесконечный сон уйдут )



  • Вот, программа полностью выключится, когда в файле аккаунтов станет пусто. Полностью, даже если неудач будет 100к, то получение аккаунта, у меня в скрипте идёт первое, то есть там буквально за 15-20 минут вырубается.

    !Но при этом если предыдущие потоки не закончили свою работу, то вся программа - всё равно останавливается. Вот по этому и интересует момент не перезапуска потока, а именно отключение как бы.

    Насчёт "вечного сна" - о такой реализации уже подумал, но ведь при этом у нас получается лишний открытый браузер и т.д



  • @support Но впринципе, возможно это только мои заморочки, ладно, я делаю через бесконечный сон где мне нужно ...



  • @support said in Закрытие потока после выполнения задачи.:

    Скрипт завершается при одном из 4 условий -

    Достигнуто макс количество успехов.
    Макс количество неудач.
    Использованы все ресурсы.
    Вызвано "Прервать Скрипт"

    Тут именно идёт завершение скрипта, и он заново начинает с нуля, если успех или ошибок хватает. А наша цель, что бы он отработал - и больше не перезапускался, а остальные потоки, которые еще не закончили своё дело - продолжили работать полноценно.
    Большой лимит ошибок - не спасает, так как именно поток который закончил - очень быстро их все использует, так как у нас БОЛЬШЕ нету аккаунтов, а он всё получает и получает.


Log in to reply
 

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