@Fox О спасибо теперь понятно как оно работает
А в ручном управлении есть какие-то быстрые клавиши.Что бы управлять браузером удобнее было. Ато на определённую вкладку часто приходится нажимать.
Написал многопоточный скрипт, но работает непонятно с неудачами
-
Всем привет. Изучаю многопоточность. Для этого написал скрипт. Скрипт сначала заходит в поиск пользователей ВК по определенному запросу, затем парсит ссылки на страницы пользователей с 1 страницы в файл. После этого в многопоточном режиме собирает количество друзей в файл. Вот проблема во втором этапе- при работе с многопотоком.
Ситуация следующая, когда количество неудач больше нуля, количество результатов отличается от тех, что я задал. Когда выставляю количество неудач = 0, все вроде бы четко. Проверку на ошибки поставил, ошибок вроде бы нет вообще. То есть, методом научного тыка я все сделал как хочу, теперь хочу понять что я сделал и почему так. Пробовал поиск по форуму, но что-то тяжело пробиваться через солянку тем. Буду благодарен за советы. Скрипт прилагается. Ресурсы: 2 пустых txt файла.
0_1500735482568_count-friends.xml -
@romanbiz Молодец что сразу приложил скрипт. Но вот зря без ресурсов.
У тебя в функции parse_count_funk установлен экшен игнорировать ошибки, суть его такова, что если в нём экшен сработает с ошибкой, то !!все!! остальные в нём, пропустятся.
То есть if[[WAS_ERROR]]надо ставить вне экшена игнорировать ошибки. Как и всё остальное, кроме загрузить.Примерно так. Проверь с ресурсами.
-
@Fox ну ошибка может не только при загрузке возникнуть насколько я знаю. Но и по ходу парсинга страницы итп.
Поправил как сказали, результат тот же.
Дано:
3 потока
3 успешных выполнения
1 неудачное использованиеПолучил 5 выполнений:
[574710937] [18:36:10] Поток №2 : поток спарсил
[574710937] [18:36:10] Поток №3 : поток спарсил
[574710937] [18:36:10] Поток №4 : поток спарсил
[574710937] [18:36:16] Поток №2 : поток спарсил
[574710937] [18:36:16] Поток №3 : поток спарсил -
@romanbiz У тебя там ошибок ни где не будет. Кроме экшена загрузить. Я приложил скрипт в своём посте выше, в котором и сделал, что писал. Если скрипт работает не так как тебе надо, скидывай ресурс, хотя бы тестовый. И опиши, какой результат хочешь увидеть в итоге.
-
@Fox Ресурсы просто пустые файлы. 2 штуки. Они наполняются по ходу действия скрипта. А при повторном его запуске содержимое файлов если они даже они не пустые очищается в начале. Дописал это в пост.
И опиши, какой результат хочешь увидеть в итоге.Я хочу понять почему когда переменная неудач >0, количество успешных выполнений начинает превышать заданное мною.
-
@Fox said in Написал многопоточный скрипт, но работает непонятно с неудачами:
@romanbiz Если в описании ресурса снять галочку с чтение и оставить галочку запись, то скрипт будет спрашивать куда сохранить файл.
Это просто совет или объяснение по моему вопросу? Просто не очень понял.
-
@romanbiz Это просто совет. Так проще, чем руками создавать файлы а потом открывать их в скрипте.
Ещё можно поставить количество неудач-1, тогда количество ошибок для потока будет бесконечно.
Не помню, что будет, если выставить количество неудачных выполнений в ноль. Но у меня твой скрипт выполняется одинаково, вне зависимости от количества неудачных выполнений.[696732904] [21:14:04] Поток №1 : взял location [390375838] [21:14:04] Поток №1 : очистил файлы [719879683] [21:14:13] Поток №1 : забрал урл [307652982] [21:14:13] Поток №1 : 30 [445557405] [21:14:25] Поток №4 : поток спарсил [445557405] [21:14:27] Поток №2 : поток спарсил [445557405] [21:14:30] Поток №3 : поток спарсил [21:14:30] Поток №1 : Поток выполнен успешно с сообщением "Ok" [21:14:30] Скрипт завершен корректно -
@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, не перезапустился потому что количество успехов достигнуто. Первый и второй работают дальше, отработают, увидят что успехи достигнуты и не будут перезапускаться. Это сделано для того что бы не потоки не закрывались посередине работы, что бы не потерять ресурсы (почты, мобильные номера, капчи и т.д.)
