@UserTrue said in Работа с куки:
@vitalik8217 кроме кук в профиле могут храниться данные которые также проверяются
Может ещё стоит обратить внимание на заголовки, или куки даются на определённое время, которые проходит
Всем привет. Изучаю многопоточность. Для этого написал скрипт. Скрипт сначала заходит в поиск пользователей ВК по определенному запросу, затем парсит ссылки на страницы пользователей с 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, не перезапустился потому что количество успехов достигнуто. Первый и второй работают дальше, отработают, увидят что успехи достигнуты и не будут перезапускаться. Это сделано для того что бы не потоки не закрывались посередине работы, что бы не потерять ресурсы (почты, мобильные номера, капчи и т.д.)