управление потоками, к-вом неудач и успехов из выполняющегося скрипта.
-
таки очень не хватает для удобства / простоты конечным юзерам, возможности прямо изнутри выполняющегося скрипта вызывать методы: изменить текущее к-во успешных, неудачных выполнений. К-во потоков.
банальный пример:
пользователь перед запуском скрипта указал, что ему нужно регнуть 500 акков, ему все равно и его не волнует (и не должно) что такое эти количества удач и провалов в выполнении скрипта. Он указал 500 акков, значит хочет получить 500 зареганных акков.Я уже в скрипте сперва указываю к-во этих неудач и успехов в 999999 , в секции онстартапп присваиваю глобальному счетчику цифру это значение 500. и при удачной реге акка отнимаю -1 от 500, в начале выполнения делаю проверку, если счетчик рег == 0 , то пора бы ПЛАВНО (не прервать) завершить работу скрипта. НАпример, изменив к-во успешных выполнений на 0. Таким образом, чтобы скрипт завершил текущие потоки, но новые уже не начинал..
Вот такая суть.ps: нашел метод
die()
но это аварийное завершение скрипта. Т.е. не плавный стоп, это не совсем подойдет.
-
@out Хорошо, я понял, что это очень нужная фича. Сделаю ее прямо сейчас.
-
@out Будет в понедельник.
-
@support А точно это будет решать задачу @out Потому что, если изнутри скрипта success поставить в 0, когда тебе нужно плавно завершить скрипт, то так не получится. Ты поставишь success в 0,а у тебя еще 4 потока в работе. Так из этих 4-х - один дойдет до успеха, а 3 прервутся, по-моему так (или нет?). Или будет возможность управлять количеством потоков? И если в 0 их поставить, то что будет? Запущенные дойдут до конца и все, а новые не запустятся?
-
@lev Я ориентировался на эту фразу
"то пора бы ПЛАВНО (не прервать) завершить работу скрипта. ", я так понимаю, что у тебя та же проблема. Будет возможность завершить процесс плавно, давая возможность запущенным потокам доработать.
-
@support О, тогда круто! Мне тоже это очень важно во многих скриптах.
-
кстати, сейчас я вижу, что после достижения указанного к-ва успехов сразу завершаются успешно остальные потоки, хоть они еще и в процессе работы.
может не стоит завершать остальные потоки (а просто не запускать новые), дать им выполнится ко конца.. даже если уже и достигло к-во успехов , указанному числу.было для теста запущено в 2 потока и 2 успешных выполнений.
краткая суть: сколько мы потоков бы не указали, первая их половина будет получать новые номера с сервиса и после использования для реги 1го акка, помещать эти номера в глобальную пер., вторая половина потоков будет сканировать эту глобальную переменную на наличие номеров, чтобы повторно принять смс для реги еще 1го акка. так вот по логу видно, как только 2 раза получили успешное выполнение, так 3 поток завершился. ДА, по логике так и должно быть, но это не сильно удобно в случае с БАС и его пользователями. так не кажется )? Тут удобнее может будет не запускать новые потоки, если еще не известно, текущие потоки были завершены удачно или нет. Если неудача, то тут же запускать новые потоки, а если удача , то их уже и не нужна запускать.
т.е. в этот неопределенный момент, когда еще никто не знает, текущие потоки завершатся с ошибкой или нет, новые не запускать.а то вот в данном моем примере, запустилось 2 потока.
1 получает номер из сервиса и регает акка. Второй запущен , но сканирует глоб. пер. на наличие номера, который будет туда записан в конце работы первого потока.
и вот 1ый поток успешно завершен, второй поток подхватывает номер его и регает на его еще 1н акк.
и в тоже время запускается новый поток (первый), который опять идет на сервис получаем номер и т.д.
но как только поток 2 завершится с успехов, поток 1 тут же прервется с успехом. Это печально)) да-да это все можно решать самому, делать кучу доп. проверок, которые еще и придумать надо)
например, вести глобальный счетчик успешных выполнений (что тоже не просто в больших скриптах, но куда проще, чем вести счетчик неудачных(ведь выходов исключений может быть много)) но допустим, нашли в себе сил вести счетчик успехов) дальше перед каждым выполнением проверять cnt_success + к-во активных потоков (счетчик которых тоже придется вести) == к-ву указанных успехов ? да: ставить поток на паузу ничего не выполняя дальше, через интервалы снова считывать глоб.пер. и так цикле. пока ответ будет НЕТ:
и вот если нет, тогда разрешать потоку работать дальше..
так что да, не помешает иметь методы, получать к-во работающих потоков (эта инфа уже есть, ее только достать надо), к-во успехов выполненных и неудач..
хотелок все больше , а админ один ) зато нет бюрократии.
-
@out said in управление потоками, к-вом неудач и успехов из выполняющегося скрипта.:
Тут удобнее может будет не запускать новые потоки, если еще не известно, текущие потоки были завершены удачно или нет. Если неудача, то тут же запускать новые потоки, а если удача , то их уже и не нужна запускать.
т.е. в этот неопределенный момент, когда еще никто не знает, текущие потоки завершатся с ошибкой или нет, новые не запускать.Мне кажется это плохой подход. Вот ты запустил скрипт в 300 потоков, и один поток где-то подзавис, получается все 300 будут ждать, с успехом он завершится или нет. Так получается. Тот метод, который админ хочет сделает не решит твою проблему из-за сложной логики со сканированием. Тебе бы надо попроще как-то сделать, что бы второй поток не сканировал номера, а сразу в одном потоке делать две регистрации. Понятно, что чуть дольше будет, но на большом количестве потоков это будет незаметно. Решил бы проблему ограничитель общего количества запущенных потоков. Но пусть лучше будет то, что ты сначала предлагал. Потому что во-первых - это уже делается, а во-вторых, следующий шаблон ты уже продумаешь как надо. Ограничитель запусков потоков может когда-нибудь в будущем.
-
@lev да, согласен, я только предлагаю варианты, а там вместе что-то додумаем )
-
@lev мне было уже лень переделывать логику скрипта, я просто добавил, как выше описывал, про счетчик успехов, активных потоков и сравнение их суммы с к-вом введенных успехов. Если >= , то поток идет в цикл , на каждой итерации после проверки пауза 15сек (сам цикл не будет длится больше 900сек).
короч в итоге все четко, лишние потоки "не запускаются"(запускаются но ждут, можно ли им работать), данные не "тратятся".
по итогам все четко)
на 2 потока и 2 успеха
и тоже самое на 4 потока, 4 усп.
[14:59:16] Поток №3 : Сканирование наличия номеров для повторных смс [14:59:16] Поток №2 : Получение номера для регистрации [14:59:16] Поток №1 : Получение номера для регистрации [14:59:16] Поток №4 : Сканирование наличия номеров для повторных смс [14:59:16] Поток №2 : Номер получен: 79295453966 id: 15385959 [14:59:16] Поток №1 : Номер получен: 79295453960 id: 15385960 [14:59:16] Поток №2 : Выполнение перехода из поисковой системы [14:59:17] Поток №1 : Выполнение перехода из поисковой системы [14:59:47] Поток №1 : Заполнение первой страницы регистрации [14:59:51] Поток №2 : Заполнение первой страницы регистрации [15:00:57] Поток №2 : Подтверждение номера в gmail [15:01:04] Поток №2 : ожидание смс [15:01:07] Поток №1 : Подтверждение номера в gmail [15:01:12] Поток №1 : ожидание смс [15:01:17] Поток №2 : смс получено: 985328 [15:01:28] Поток №1 : смс получено: 429150 [15:01:38] Поток №2 : Аккаунт gmail зарегистрирован [15:01:49] Поток №1 : Аккаунт gmail зарегистрирован [15:01:55] Поток №2 : Создание канала YouTube [15:02:03] Поток №1 : Создание канала YouTube [15:02:28] Поток №2 : Подтверждение номера в YouTube [15:02:33] Поток №1 : Подтверждение номера в YouTube [15:02:47] Поток №2 : ожидание смс [15:02:49] Поток №1 : ожидание смс [15:03:02] Поток №2 : смс получено: 737390 [15:03:04] Поток №3 : Номер для повтора найден: 79295453966 [15:03:04] Поток №3 : Выполнение перехода из поисковой системы [15:03:12] Поток №2 : Данные сохранены. [15:03:12] Поток №2 : Поток выполнен успешно с сообщением "Ok" [15:03:35] Поток №3 : Заполнение первой страницы регистрации [15:04:40] Поток №3 : Подтверждение номера в gmail [15:04:47] Поток №3 : ожидание смс [15:05:00] Поток №3 : смс получено: 823790 [15:05:04] Поток №1 : смс получено: 378102 [15:05:14] Поток №1 : Данные сохранены. [15:05:14] Поток №1 : Поток выполнен успешно с сообщением "Ok" [15:05:15] Поток №4 : Номер для повтора найден: 79295453960 [15:05:15] Поток №4 : Выполнение перехода из поисковой системы [15:05:20] Поток №3 : Аккаунт gmail зарегистрирован [15:05:43] Поток №3 : Создание канала YouTube [15:05:48] Поток №4 : Заполнение первой страницы регистрации [15:06:18] Поток №3 : Подтверждение номера в YouTube [15:06:38] Поток №3 : ожидание смс [15:06:48] Поток №4 : Подтверждение номера в gmail [15:06:51] Поток №3 : смс получено: 327989 [15:06:53] Поток №4 : ожидание смс [15:06:59] Поток №3 : Данные сохранены. [15:06:59] Поток №3 : Поток выполнен успешно с сообщением "Ok" [15:07:07] Поток №4 : смс получено: 946704 [15:07:29] Поток №4 : Аккаунт gmail зарегистрирован [15:07:46] Поток №4 : Создание канала YouTube [15:08:17] Поток №4 : Подтверждение номера в YouTube [15:08:35] Поток №4 : ожидание смс [15:08:47] Поток №4 : смс получено: 430264 [15:08:55] Поток №4 : Данные сохранены. [15:08:56] Поток №4 : Поток выполнен успешно с сообщением "Ok" [15:08:56] Поток №1 : Поток выполнен успешно с сообщением "Ok" [15:08:56] Поток №2 : Поток выполнен успешно с сообщением "Ok" [15:08:56] Поток №3 : Поток выполнен успешно с сообщением "Ok" [15:08:56] Скрипт завершен корректно
-
кстати, сейчас я вижу, что после достижения указанного к-ва успехов сразу завершаются успешно остальные потоки, хоть они еще и в процессе работы.
может не стоит завершать остальные потоки (а просто не запускать новые), дать им выполнится ко конца.. даже если уже и достигло к-во успехов , указанному числу.так что да, не помешает иметь методы, получать к-во работающих потоков (эта инфа уже есть, ее только достать надо), к-во успехов выполненных и неудач..
Это будет в понедельник.
хотелок все больше , а админ один ) зато нет бюрократии.
Я бы с удовольствием добавил в код модуль для обработки изображений на основе http://doc.qt.io/qt-5/qimage.html и модуль для отправки писем(https://curl.haxx.se/libcurl/c/smtp-mail.html) и работы с фтп(https://curl.haxx.se/libcurl/c/ftpget.html), если бы кто-то согласился их сделать. Или заапрувил новые скрипты в магазине. Это бы очень помогло проекту.
-
@out said in управление потоками, к-вом неудач и успехов из выполняющегося скрипта.:
как выше описывал, про счетчик успехов, активных потоков и сравнение их суммы с к-вом введенных успехов
Как вариант
-
кстати, сейчас я вижу, что после достижения указанного к-ва успехов сразу завершаются успешно остальные потоки, хоть они еще и в процессе работы.
может не стоит завершать остальные потоки (а просто не запускать новые), дать им выполнится ко конца.. даже если уже и достигло к-во успехов , указанному числу.В новой версии так и работает.
так что да, не помешает иметь методы, получать к-во работающих потоков (эта инфа уже есть, ее только достать надо), к-во успехов выполненных и неудач..
Добавил, действия "Успешных выполнений" и "Неудачных выполнений"