Как запускать потоки поочереди? а не все сразу
-
я не знаю по поводу перезапуска - но была ситуация, когда выставив 3 потока, где из списка брался первый элемент с удалением - все три потока использовали один и тот же элемент - затем он удалялся и все три потока использовали второй первый элемент...
Да так и происходит. Когда вы загружаете ресурс в список то происходит копирование данных, и удаление данных из списка не влияет на ресурс. Это решается использованием ресурса {{res}}, а не таймаутами.
Что то сдесь логика не прослеживается - спасть последним действием - это действие которое выполняется в конце потока - а при многопотоке потки идут паралельно?! - или нет? Если параллельно - то речь о том. чтобы сделать настройку для ступенчатого их запуска! друг за другом в заданном интервале
Тогда предложенный вами вариант интерфейса будет смущать пользователей
-
@support said in Как запускать потоки поочереди? а не все сразу:
Это решается использованием ресурса {{res}}, а не таймаутами.
Что есть {{res}}? - я же не матерюсь - а Вы начинаете - я же помощи прошу - как мне при многопотоке брать первый элемент с удалением так, чтобы он был разный для всех потоков? Я так понимаю, что вариант предложенный @35xakers - то же не решит вопрос?
@support said in Как запускать потоки поочереди? а не все сразу:
Да так и происходит. Когда вы загружаете ресурс в список то происходит копирование данных, и удаление данных из списка не влияет на ресурс. Это решается использованием ресурса {{res}}, а не таймаутами.
Я пробовал загружать ресурс в список в онапликатионстарт - но переменные не работают - пробовал так же создать глобальную переменную в онапликатионстарт и присвоить ей значение переменной содержащей список - то же не але... Где вход, где выход???
-
@support said in Как запускать потоки поочереди? а не все сразу:
Когда вы загружаете ресурс в список то происходит копирование данных, и удаление данных из списка не влияет на ресурс.
А может копирование данных здесь не причем? - копирование данных из ресурса в буферный список - это само собой разумеющееся - но потоки использовали именно список а не ресурс - соответственно если копирование ресурса в список делать вне онапликатионстарт - то данное действие будет делать каждый поток - но переменная списка у нас одна - и если один из потоков уже взял данные со списка а второй их туда перенес с ресурса - то там снова появиться уже использованная строка, а если это сделать в онапликатионстарт - то действие выполниться один раз до запуска многопотока.
Скорее всего Вам это покажется бредом - я не настаиваю на правильности того что изложил - я просто показываю как это видел я, до того как Вы скинули пример - и если так думал я, человек без навыков кодирования - то так могут думать и другие простые пользователи. И мне до сих пор непонятно - почему не удалось сделать как делал я?
В онапликатионстарт делаем ресурс в список - присваиваем список в глобальную переменную и используем ее в основном проекте для всех потоков - то есть используем виртуальный список - берем с него первый элемент с удалением - (там даже галочка такая есть).... - - - Это я все веду к тому, что Вы ООООЧЕНЬ СЛОЖНО реализуете программу - каждый раз что-то пытаясь сделать - я начинаю чувствовать себя обезьяной с гранатой или дауном - хотя судя по тому, что я администрирую сайты и вношу изменения в штмл и цсс, причем удачно - таким не являюсь, хотя кто знает))).
Вот простой пример - использования авторизации по печенькам - да у меня чуть материнка в голове не пригорела - я как простой пользователь это вижу так:
загрузил сайт - ввел логин и пароль - авторизовался - записал кукисы в файл - это все понятно - далее авторизация по кукисам - 1е действие - загрузил кукисы - 2ое действие загрузил сайт - ВСЕ!!! - Кукисы уже были загружены в браузер - авторизация прошла успешно - Можно ли так сделать? - Это просто и логично в моем понимании) ВЕДЬ ИСПОЛЬЗОВАНИЕ ПРОКСИ РЕАЛИЗОВАНО ИМЕННО ТАК!!! СДЕЛАЙТЕ ТАК ЖЕ С КУКИСАМИ!!!!
-
Что есть {{res}}? - я же не матерюсь - а Вы начинаете - я же помощи прошу - как мне при многопотоке брать первый элемент с удалением так, чтобы он был разный для всех потоков? Я так понимаю, что вариант предложенный @35xakers - то же не решит вопрос?
Это элементарная задача - решается с помощью использования ресурсов. Когда используете ресурс, то БАС сам следит за тем чтобы он был разным для всех потоков. Что может быть проще?
Я пробовал загружать ресурс в список в онапликатионстарт - но переменные не работают - пробовал так же создать глобальную переменную в онапликатионстарт и присвоить ей значение переменной содержащей список - то же не але... Где вход, где выход???
Зачем пытаться сделать сложно, там где можно сделать легко?
А может копирование данных здесь не причем? - копирование данных из ресурса в буферный список - это само собой разумеющееся - но потоки использовали именно список а не ресурс - соответственно если копирование ресурса в список делать вне онапликатионстарт - то данное действие будет делать каждый поток - но переменная списка у нас одна - и если один из потоков уже взял данные со списка а второй их туда перенес с ресурса - то там снова появиться уже использованная строка, а если это сделать в онапликатионстарт - то действие выполниться один раз до запуска многопотока.
Какую цель вы ставите перед собой делая эти действия?
Скорее всего Вам это покажется бредом - я не настаиваю на правильности того что изложил - я просто показываю как это видел я, до того как Вы скинули пример - и если так думал я, человек без навыков кодирования - то так могут думать и другие простые пользователи. И мне до сих пор непонятно - почему не удалось сделать как делал я?
Потому что когда вы загружаете список в ресурс, то это просто копия ресурса и там могут быть ресурсы, которые другой поток использует сейчас.
В онапликатионстарт делаем ресурс в список - присваиваем список в глобальную переменную и используем ее в основном проекте для всех потоков - то есть используем виртуальный список - берем с него первый элемент с удалением - (там даже галочка такая есть).... - - - Это я все веду к тому, что Вы ООООЧЕНЬ СЛОЖНО реализуете программу - каждый раз что-то пытаясь сделать - я начинаю чувствовать себя обезьяной с гранатой или дауном - хотя судя по тому, что я администрирую сайты и вношу изменения в штмл и цсс, причем удачно - таким не являюсь, хотя кто знает))).
Это сделано для того, чтобы удалять дубликаты. Можно сделать проще - дописывать данные в файл сразу. Небольшой костыль пока не OnApplicationEnd
Вот простой пример - использования авторизации по печенькам - да у меня чуть материнка в голове не пригорела - я как простой пользователь это вижу так:
загрузил сайт - ввел логин и пароль - авторизовался - записал кукисы в файл - это все понятно - далее авторизация по кукисам - 1е действие - загрузил кукисы - 2ое действие загрузил сайт - ВСЕ!!! - Кукисы уже были загружены в браузер - авторизация прошла успешно - Можно ли так сделать? - Это просто и логично в моем понимании) ВЕДЬ ИСПОЛЬЗОВАНИЕ ПРОКСИ РЕАЛИЗОВАНО ИМЕННО ТАК!!! СДЕЛАЙТЕ ТАК ЖЕ С КУКИСАМИ!!!!Так и есть, но в том примере, что я сбрасывал поверх этого сделано несколько улучшений.
1). Проверка того, существует ли файл с куками.
2). Разные файлы для разных пользователей.
3). Проверка того, был ли выполнен вход.
4). Если сессия устарели вход все равно может быть выполнен с помощью логина и пароля.
5). Поддержка логинов, которые могут содержать символы запрещенныеЕсли начнете с тех 2 действий, которые описали, а потом будете добавлять фичи по одной, получится такая функция, как в примере.
-
@support Огромное человеческое спасибо! Это великий труд с Вашей стороны!
Неправильный ход моей мысли при использовании BAS - это моя проблема - просто реально прилагая усилия - хочется научиться понимать алгоритмы использования действий - примеров маловато(. Спасибо еще раз...
-
Подскажите как модифицировать предложенное решение, чтобы потоки не по 1-му стартовали по очереди, а партиями например по 20 штук(для примера число ядер процессора). Т.е. стартовали 20 потом через 30 секунд еще 20(к этому моменту 40 работают), потом еще через 30 секунд еще 20.
-
@Basak298 Самое простое, это в начале скрипта определять номер потока, а затем
if [[THREAD_INDEX]] > 20 && [[THREAD_INDEX]] < 40 sleep 30000 if [[THREAD_INDEX]] > 40 && [[THREAD_INDEX]] < 60 sleep 60000 if [[THREAD_INDEX]] > 60 && [[THREAD_INDEX]] < 80 sleep 90000 if [[THREAD_INDEX]] > 80 && [[THREAD_INDEX]] < 100 sleep 120000
-
@Fox определил номер потока и вставил Ваш код вначале(еще поправив синтаксис). Сейчас BAS тупо виснет при старте. Не пойму в чем причина. Если не сложно можете кусок простого проекта с такой реализацией скинуть?
-
Может кто-то привести пример с куском кода по моему вопросу? У меня BAS виснет и приложение BAS завершает работу.
-
@Basak298 Ухты, 22 дня назад вы об этом спрашивали.. а я как то не увидел..
Если вопрос про:Подскажите как модифицировать предложенное решение, чтобы потоки не по 1-му стартовали по очереди, а партиями например по 20 штук(для примера число ядер процессора). Т.е. стартовали 20 потом через 30 секунд еще 20(к этому моменту 40 работают), потом еще через 30 секунд еще 20.
То вот пример скрипта.
-
@Basak298 Я правильно понимаю, вы
вставил Ваш код вначале(еще поправив синтаксис)
то есть скопировали отсюда и вставили в экшен выполнить код ? Подправив синтаксис?
:D
-
Попробовал Ваш код. Вроде работает нужная мне реализация, единственное не пойму зачем вы ставите 2 секции со sleep(вторая со значением 9999999 )?
-
@Basak298 Ну дак это пример ведь.
-
@Fox спасибо Вам!
-
@Fox Привет. хотел посмотреть твой пример. но у меня, после открытия в БАСё просто написано "инициализация" и ничего больше нет..
-
@CaptchaLom Скачал я свой пример и он нормально открылся:
На всякий пожарный перезалил по новой.