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

  • Автор темы Автор темы Spelin
  • Дата начала Дата начала

Spelin

Client
Регистрация
24.09.2019
Сообщения
449
Реакции
126
Баллы
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)

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

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

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

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

Как-то так....
Стоит проверка на работоспособность прокси. Как поставить на то что она занята?
 
Список с файлом
Беру в переменную с удалением
С переменной уже устанавливаю через кубик
Возвращаю в список (в конец) из переменной в конце

В списке стоит галка изменение файла
 
да странно, через кубик файл должен лочиться....
а с другой стороны , а как вы определили что 2-й поток взял проксю из 3-го потока ? а еще , без прокси отрабатывает.. тоже как вы это определили ? ведь что бы без прокси отработать в переменной должно быть пусто, а кубик вернет ошибку если файл пустой. как же у вас получается получить пустую строку ? вот перед кубиком с установкой поставьте вывод сообщения в лог с этой переменной и блок if c проверкой на пустую переменную.
 
когда список пустеет и кубик взятия строки отрабатывает с ошибкой ты возвращаешь в список пустую строку, которую в последствии подхватывает другой поток и, как результат, отрабатывает без прокси
 
когда список пустеет и кубик взятия строки отрабатывает с ошибкой ты возвращаешь в список пустую строку, которую в последствии подхватывает другой поток и, как результат, отрабатывает без прокси
точно. запись прокси в список наверняка на BAD END висит и без проверки на пустоту.
 
да странно, через кубик файл должен лочиться....
а с другой стороны , а как вы определили что 2-й поток взял проксю из 3-го потока ? а еще , без прокси отрабатывает.. тоже как вы это определили ? ведь что бы без прокси отработать в переменной должно быть пусто, а кубик вернет ошибку если файл пустой. как же у вас получается получить пустую строку ? вот перед кубиком с установкой поставьте вывод сообщения в лог с этой переменной и блок if c проверкой на пустую переменную.
2 потока по инстансам висели с одинаковыми проксями - из этого сделал вывод что какой-то поток вернул уже занятую проксю, т.к. на момент запуска она для него была свободна
 
когда список пустеет и кубик взятия строки отрабатывает с ошибкой ты возвращаешь в список пустую строку, которую в последствии подхватывает другой поток и, как результат, отрабатывает без прокси
Да. Одна проблема решена! Спасибо!

Осталось только разобраться с многопотоком и списками.
 
Как можно в конце отработки шаблона перегрузить список и добавить в него строку?
 
Да. Одна проблема решена! Спасибо!

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

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

Как-то так....
Стоит проверка на работоспособность прокси. Как поставить на то что она занята?
На ip, но я думаю, что косяк не в зенке. Попробуй в логе выводить какая прокся используется и дергай айпишку прокси и выводи в логе и увидишь, что логика скорее всего не верно выписана. Я работаю и в 1000 и в 2000 потоков с одним списком прокси и проблем таких нет. Ну или версия зенки древняя.
 
ну это вовсе не показатель. бывает что инстанс уже закончил работу , а его окно еще висит. вот так может и показаться что 2 потока работают с одним прокси.
для более точной диагностики надо выводить в лог переменную перед установкой прокси. все сразу будет ясно.
не, они прям работали
 
если они работали то должны были записать в файл 2 одинаковых прокси. и пустые строки должны были появляться в файле. по факту в файле проксей что имеется ?
 
Список, если он привязан к файлу с галкой на сохранение изменений, общий для всех потоков. И меняя его в одном потоке он меняется и в другом. В этом не может быть проблемы. Если какие-то данные теряются или берутся не правильно - это проблема реализованной тобой логики
Как писал выше, логика простая - получить 1 строку из списка проксей, в конце ее вернуть в список. С галкой изменения в файле.

При 5 прокси на 2 потоках все ок. А дальше начинаются глюки.
Точно он в процессе реализации шаблона меняет список в зависимости от внесенных в файл изменений? Мне просто по такой логике показалось, что в начале отработки он загружает список и возвращает его с изменениями в данном потоке. А что там происходит в других потоках, он эти изменения не учитывает
 
Лучшее решение после установки прокси чекать на том же check.zennolab либо аналогах ip адрес, если он = адресу компа с которого запрос был, а не прокси, значит не поставился прокси
 
если они работали то должны были записать в файл 2 одинаковых прокси. и пустые строки должны были появляться в файле. по факту в файле проксей что имеется ?
Пустая строка имелась. С этим уже понял что нужна проверка.
И да, следил за файлом. И увидел 2 одинаковые прокси в файле. Но когда закончили отрабатывать все потоки, уже не было ее)
 
Лучшее решение после установки прокси чекать на том же 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 прокси. Как я и увидел.
 
Как писал выше, логика простая - получить 1 строку из списка проксей, в конце ее вернуть в список. С галкой изменения в файле.

При 5 прокси на 2 потоках все ок. А дальше начинаются глюки.
Точно он в процессе реализации шаблона меняет список в зависимости от внесенных в файл изменений? Мне просто по такой логике показалось, что в начале отработки он загружает список и возвращает его с изменениями в данном потоке. А что там происходит в других потоках, он эти изменения не учитывает
точно. Глюки могут быть, только если параллельно ты пытаешься работать со списком как с файлом. Можно больше конкретики по т.н. глюкам? Теряются строки?
 
Да, но проблему не решает, т.к. -
у меня по итогу при 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 прокси. Как я и увидел.
значит существует логика, при которой строки не возвращаются
 
А строки назад ложите в конце шаблона, либо при ошибках и тд
 
Да, но проблему не решает, т.к. -
у меня по итогу при 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 прокси. Как я и увидел.
нет. список обновляется при изменении файла. тем более если работать через кубик , то список еще и лочиться на момент записи/чтения.
если у вас нет в файле двойных одинаковых записей по результатам нескольких прогонов , то беспокоиться не о чем. для большей инфы , выводите в лог какой прокси ставите в потоке. ну и какую нибудь метку рядом с ним для идентификации потока. можно рандомом генерить в начале шаблона.
 
У меня при любом раскладе и на Гуд и на Бэд энд возврат строки в список
значит до этого момента не доходит. Или где-то двойное взятие или ещё что-то. Без шаба это гадание на кофейной гуще
 
Столкнулся с тем что шаблон бывает отрабатывает без прокси. В 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.
Разблокируется таблица
 
Перешел на работу с Mysql.

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

Закончилась работа с прокси.
Блокируется таблица.
Статус меняется на 0.
Разблокируется таблица
боже упаси лезть в mysql, тут человек с файлом одним не может разобраться, какой mysql?
 
Нашел вроде в чем косяк)
Стоит проверка на смену ip прокси, и если после какого-то времени ip не сменился, то берется следующий прокси, а этот добавляется в конец списка. И поэтому получается ошибка с одинаковыми проксями в файле.
 

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