Правильный алгоритм прокси в многопотоке

Spelin

Client
Регистрация
24.09.2019
Сообщения
446
Благодарностей
122
Баллы
43
Столкнулся с тем что шаблон бывает отрабатывает без прокси. В 1 потоке конечно же все ок.

В шабе подгружаю прокси списком. В начале шаблона берется 1 в списке, в конце шаблона возвращаю проксю обратно в конец списка. Список настроен на изменение.

Для примера: 5 прокси в списке.
1, 2, 3 потока - все ок. 4 потока начинаются глюки.

Как я понял, проблема именно в перезаписывании файла потоками:
Прокси 1,2,3,4,5
Грубо говоря первый поток взял 1 прокси и в списке 2,3,4,5 - после отработки он возвращает (2,3,4,5,1)
Паралельно второй поток взял 2 прокси и в списке 3,4,5 - после отработки он возвращает (3,4,5,2)
Третий поток взял 3 прокси и в списке 4,5 - после отработки он возвращает (4,5,3)

И вот тут возникают глюки)

Я так понимаю работать через списки не вариант?

Как бы настроить чтобы потоки не перезаписывали полностью файл, а меняли только строки в нем?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 719
Баллы
113
и будет то же самое.
надо просто проверку сделать, что прокси удачно получен и установлен. если не прошла проверка, то на выход.
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
446
Благодарностей
122
Баллы
43
и будет то же самое.
надо просто проверку сделать, что прокси удачно получен и установлен. если не прошла проверка, то на выход.
Проверка на установлен?

Конкретный пример:
2 поток отработал и ждет прокси, 1 поток отработал и 2 поток берет прокси который вернул 1 поток, а в итоге прокси получается та, которая щас крутится в 3 потоке.....

Как-то так....
Стоит проверка на работоспособность прокси. Как поставить на то что она занята?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 719
Баллы
113

Spelin

Client
Регистрация
24.09.2019
Сообщения
446
Благодарностей
122
Баллы
43
Список с файлом
Беру в переменную с удалением
С переменной уже устанавливаю через кубик
Возвращаю в список (в конец) из переменной в конце

В списке стоит галка изменение файла
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 719
Баллы
113
да странно, через кубик файл должен лочиться....
а с другой стороны , а как вы определили что 2-й поток взял проксю из 3-го потока ? а еще , без прокси отрабатывает.. тоже как вы это определили ? ведь что бы без прокси отработать в переменной должно быть пусто, а кубик вернет ошибку если файл пустой. как же у вас получается получить пустую строку ? вот перед кубиком с установкой поставьте вывод сообщения в лог с этой переменной и блок if c проверкой на пустую переменную.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
когда список пустеет и кубик взятия строки отрабатывает с ошибкой ты возвращаешь в список пустую строку, которую в последствии подхватывает другой поток и, как результат, отрабатывает без прокси
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 719
Баллы
113
когда список пустеет и кубик взятия строки отрабатывает с ошибкой ты возвращаешь в список пустую строку, которую в последствии подхватывает другой поток и, как результат, отрабатывает без прокси
точно. запись прокси в список наверняка на BAD END висит и без проверки на пустоту.
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
446
Благодарностей
122
Баллы
43
да странно, через кубик файл должен лочиться....
а с другой стороны , а как вы определили что 2-й поток взял проксю из 3-го потока ? а еще , без прокси отрабатывает.. тоже как вы это определили ? ведь что бы без прокси отработать в переменной должно быть пусто, а кубик вернет ошибку если файл пустой. как же у вас получается получить пустую строку ? вот перед кубиком с установкой поставьте вывод сообщения в лог с этой переменной и блок if c проверкой на пустую переменную.
2 потока по инстансам висели с одинаковыми проксями - из этого сделал вывод что какой-то поток вернул уже занятую проксю, т.к. на момент запуска она для него была свободна
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
446
Благодарностей
122
Баллы
43
когда список пустеет и кубик взятия строки отрабатывает с ошибкой ты возвращаешь в список пустую строку, которую в последствии подхватывает другой поток и, как результат, отрабатывает без прокси
Да. Одна проблема решена! Спасибо!

Осталось только разобраться с многопотоком и списками.
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
446
Благодарностей
122
Баллы
43
Как можно в конце отработки шаблона перегрузить список и добавить в него строку?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Да. Одна проблема решена! Спасибо!

Осталось только разобраться с многопотоком и списками.
Список, если он привязан к файлу с галкой на сохранение изменений, общий для всех потоков. И меняя его в одном потоке он меняется и в другом. В этом не может быть проблемы. Если какие-то данные теряются или берутся не правильно - это проблема реализованной тобой логики
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 719
Баллы
113
2 потока по инстансам висели с одинаковыми проксями - из этого сделал вывод что какой-то поток вернул уже занятую проксю, т.к. на момент запуска она для него была свободна
ну это вовсе не показатель. бывает что инстанс уже закончил работу , а его окно еще висит. вот так может и показаться что 2 потока работают с одним прокси.
для более точной диагностики надо выводить в лог переменную перед установкой прокси. все сразу будет ясно.
 

melutsk

Client
Регистрация
03.08.2016
Сообщения
1 348
Благодарностей
1 259
Баллы
113
Проверка на установлен?

Конкретный пример:
2 поток отработал и ждет прокси, 1 поток отработал и 2 поток берет прокси который вернул 1 поток, а в итоге прокси получается та, которая щас крутится в 3 потоке.....

Как-то так....
Стоит проверка на работоспособность прокси. Как поставить на то что она занята?
На ip, но я думаю, что косяк не в зенке. Попробуй в логе выводить какая прокся используется и дергай айпишку прокси и выводи в логе и увидишь, что логика скорее всего не верно выписана. Я работаю и в 1000 и в 2000 потоков с одним списком прокси и проблем таких нет. Ну или версия зенки древняя.
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
446
Благодарностей
122
Баллы
43
ну это вовсе не показатель. бывает что инстанс уже закончил работу , а его окно еще висит. вот так может и показаться что 2 потока работают с одним прокси.
для более точной диагностики надо выводить в лог переменную перед установкой прокси. все сразу будет ясно.
не, они прям работали
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
446
Благодарностей
122
Баллы
43

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 719
Баллы
113
если они работали то должны были записать в файл 2 одинаковых прокси. и пустые строки должны были появляться в файле. по факту в файле проксей что имеется ?
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
446
Благодарностей
122
Баллы
43
Список, если он привязан к файлу с галкой на сохранение изменений, общий для всех потоков. И меняя его в одном потоке он меняется и в другом. В этом не может быть проблемы. Если какие-то данные теряются или берутся не правильно - это проблема реализованной тобой логики
Как писал выше, логика простая - получить 1 строку из списка проксей, в конце ее вернуть в список. С галкой изменения в файле.

При 5 прокси на 2 потоках все ок. А дальше начинаются глюки.
Точно он в процессе реализации шаблона меняет список в зависимости от внесенных в файл изменений? Мне просто по такой логике показалось, что в начале отработки он загружает список и возвращает его с изменениями в данном потоке. А что там происходит в других потоках, он эти изменения не учитывает
 

Valandersi

Client
Регистрация
19.01.2015
Сообщения
1 923
Благодарностей
1 123
Баллы
113
Лучшее решение после установки прокси чекать на том же check.zennolab либо аналогах ip адрес, если он = адресу компа с которого запрос был, а не прокси, значит не поставился прокси
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
446
Благодарностей
122
Баллы
43
если они работали то должны были записать в файл 2 одинаковых прокси. и пустые строки должны были появляться в файле. по факту в файле проксей что имеется ?
Пустая строка имелась. С этим уже понял что нужна проверка.
И да, следил за файлом. И увидел 2 одинаковые прокси в файле. Но когда закончили отрабатывать все потоки, уже не было ее)
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
446
Благодарностей
122
Баллы
43
Лучшее решение после установки прокси чекать на том же check.zennolab либо аналогах ip адрес, если он = адресу компа с которого запрос был, а не прокси, значит не поставился прокси
Да, но проблему не решает, т.к. -
у меня по итогу при 4 потоках и 5 прокси в файле. В конце. Когда отработал самый последний поток, в файле оказалось 2 прокси!
И получается что как я выше писал: список в процессе работы шаблона загружается 1 раз в начале и ему пофиг на изменения которые происходят с файлом в других потоках. И получается
1 поток взял 1 проксю, оставил 2,3,4,5
2 поток взял 2 проксю, оставил 3,4,5
3 поток взял 3 проксю, оставил 4,5
4 поток вяз 4 проксю, оставил 5

И если самый последний будет 4 поток, то я получу в файле 5,4 прокси. Как я и увидел.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Как писал выше, логика простая - получить 1 строку из списка проксей, в конце ее вернуть в список. С галкой изменения в файле.

При 5 прокси на 2 потоках все ок. А дальше начинаются глюки.
Точно он в процессе реализации шаблона меняет список в зависимости от внесенных в файл изменений? Мне просто по такой логике показалось, что в начале отработки он загружает список и возвращает его с изменениями в данном потоке. А что там происходит в других потоках, он эти изменения не учитывает
точно. Глюки могут быть, только если параллельно ты пытаешься работать со списком как с файлом. Можно больше конкретики по т.н. глюкам? Теряются строки?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Да, но проблему не решает, т.к. -
у меня по итогу при 4 потоках и 5 прокси в файле. В конце. Когда отработал самый последний поток, в файле оказалось 2 прокси!
И получается что как я выше писал: список в процессе работы шаблона загружается 1 раз в начале и ему пофиг на изменения которые происходят с файлом в других потоках. И получается
1 поток взял 1 проксю, оставил 2,3,4,5
2 поток взял 2 проксю, оставил 3,4,5
3 поток взял 3 проксю, оставил 4,5
4 поток вяз 4 проксю, оставил 5

И если самый последний будет 4 поток, то я получу в файле 5,4 прокси. Как я и увидел.
значит существует логика, при которой строки не возвращаются
 

Valandersi

Client
Регистрация
19.01.2015
Сообщения
1 923
Благодарностей
1 123
Баллы
113
А строки назад ложите в конце шаблона, либо при ошибках и тд
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
446
Благодарностей
122
Баллы
43

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 719
Баллы
113
Да, но проблему не решает, т.к. -
у меня по итогу при 4 потоках и 5 прокси в файле. В конце. Когда отработал самый последний поток, в файле оказалось 2 прокси!
И получается что как я выше писал: список в процессе работы шаблона загружается 1 раз в начале и ему пофиг на изменения которые происходят с файлом в других потоках. И получается
1 поток взял 1 проксю, оставил 2,3,4,5
2 поток взял 2 проксю, оставил 3,4,5
3 поток взял 3 проксю, оставил 4,5
4 поток вяз 4 проксю, оставил 5

И если самый последний будет 4 поток, то я получу в файле 5,4 прокси. Как я и увидел.
нет. список обновляется при изменении файла. тем более если работать через кубик , то список еще и лочиться на момент записи/чтения.
если у вас нет в файле двойных одинаковых записей по результатам нескольких прогонов , то беспокоиться не о чем. для большей инфы , выводите в лог какой прокси ставите в потоке. ну и какую нибудь метку рядом с ним для идентификации потока. можно рандомом генерить в начале шаблона.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
У меня при любом раскладе и на Гуд и на Бэд энд возврат строки в список
значит до этого момента не доходит. Или где-то двойное взятие или ещё что-то. Без шаба это гадание на кофейной гуще
 
Регистрация
12.07.2014
Сообщения
916
Благодарностей
373
Баллы
63
Столкнулся с тем что шаблон бывает отрабатывает без прокси. В 1 потоке конечно же все ок.

В шабе подгружаю прокси списком. В начале шаблона берется 1 в списке, в конце шаблона возвращаю проксю обратно в конец списка. Список настроен на изменение.

Для примера: 5 прокси в списке.
1, 2, 3 потока - все ок. 4 потока начинаются глюки.

Как я понял, проблема именно в перезаписывании файла потоками:
Прокси 1,2,3,4,5
Грубо говоря первый поток взял 1 прокси и в списке 2,3,4,5 - после отработки он возвращает (2,3,4,5,1)
Паралельно второй поток взял 2 прокси и в списке 3,4,5 - после отработки он возвращает (3,4,5,2)
Третий поток взял 3 прокси и в списке 4,5 - после отработки он возвращает (4,5,3)

И вот тут возникают глюки)

Я так понимаю работать через списки не вариант?

Как бы настроить чтобы потоки не перезаписывали полностью файл, а меняли только строки в нем?
Перешел на работу с Mysql.

Берём строку с прокси.
Блокируется таблица.
Берется строка со статусом 0, и статус меняется на 1.
Разблокируется таблица

Закончилась работа с прокси.
Блокируется таблица.
Статус меняется на 0.
Разблокируется таблица
 

melutsk

Client
Регистрация
03.08.2016
Сообщения
1 348
Благодарностей
1 259
Баллы
113
Перешел на работу с Mysql.

Берём строку с прокси.
Блокируется таблица.
Берется строка со статусом 0, и статус меняется на 1.
Разблокируется таблица

Закончилась работа с прокси.
Блокируется таблица.
Статус меняется на 0.
Разблокируется таблица
боже упаси лезть в mysql, тут человек с файлом одним не может разобраться, какой mysql?
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
446
Благодарностей
122
Баллы
43
Нашел вроде в чем косяк)
Стоит проверка на смену ip прокси, и если после какого-то времени ip не сменился, то берется следующий прокси, а этот добавляется в конец списка. И поэтому получается ошибка с одинаковыми проксями в файле.
 

Кто просматривает тему: (Всего: 3, Пользователи: 0, Гости: 3)