Правильная логика работы со списком+прокси api

loka23

Client
Регистрация
02.08.2019
Сообщения
127
Благодарностей
10
Баллы
18
Доброго времени.
У меня есть прокси, которые меняют ip адрес по обращению(запросу). Нужно как то построить логику чтобы была стабильная работа. Сейчас работает так:
В файл вставляю 5 проксей. Работать будет 5 потоков.
- в шаблоне через работу со списком беру первую строку(проксю) и кладу её в пременную proxy.
- далее выполняет требуемые мне действия в шаблоне
- по завершению опять же через работу со списками кладу перменную proxy в конец файла с проксями и меняю айпи на проксях. (тут же сделал bad end, чтобы в случае чего - прокси в любом случае записывались в файл. В настройках при прерывании так же стоит выполнение badend. Ещё стоит в настройках таймаут выполнения. Но думаю это тоже самое прерывание и должно выходить по badend)

Но вот проблема - при большом количестве повторений прокси где то теряются. Я так понимаю что они теряются в ходе работы.... но вот почему. Разветвлений никаких нет. Есть старт и цепочкой идёт до конца шаблона - если что не так, должен быть badend.

Возможно чтобы избежать потери проксей в процессе работы - нужно сразу брать строку\проксю, устанавливать её и класть обратно в список. Только после этого выполнять работу. НО! если же один поток будет долго выполнять работу, а в файле уже прокся будет лежать, то другой поток может взять проксю и получится что 2 потока будет работать с одной проксей.
И ещё такой вопрос - из списка могут ли 2 шустрых потока подхватить одну проксю или такое исключено?

Прошу подсказать или поделиться полезными снипетами(желательно без sql, баз и т.п. Ещё не сталкивался с этим, а реализовать побыстрее нужно)
 

loka23

Client
Регистрация
02.08.2019
Сообщения
127
Благодарностей
10
Баллы
18
Т.е. лочить нужно чтобы пока один поток не обработает список, другому потоку не дать доступ? А как же если потом другой поток подхватит проксю которая работает уже на другом потоке? т.к. сразу же в список прокся кладется(в случае с локом), а не в конце работы шаблона.

Или можно в начале шаблона брать проксю с локом, далее работаем, а в конце тоже класть обратно проксю с локом. Не соображу просто где прокся теряется. либо его утягивает какой то поток, либо в ходе работы. Но в ходе работы уже проверял - нигде не должно теряться...
В этом случае нужно при взятии прокси лок списка и анлок в конце?
 

Phoenix78

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

loka23

Client
Регистрация
02.08.2019
Сообщения
127
Благодарностей
10
Баллы
18
лучше все это делать с дополнительными полями. в таблице например. и не удалять а менять статусы у строк с датой изменения статуса и id потока . тогда и будет видно что и где теряется.
список не годится для ограниченного колличества записей. либо нужен еще один список, где ничего не удаляется, а только перекладывается в рабочий список один раз при пустом рабочем списке. тоже все через лок.
Не совсем понятно, но очень интересно))
Т.е. таблица и в ней 5 строк, во втором столбце статус занятности false\true. Если занят, то ждём освобожение(освобождение при badend и на финише шаблона).
А дату изменения для чего?
С таблицами дел ещё не сталкивался.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
Не совсем понятно, но очень интересно))
Т.е. таблица и в ней 5 строк, во втором столбце статус занятности false\true. Если занят, то ждём освобожение(освобождение при badend и на финише шаблона).
А дату изменения для чего?
С таблицами дел ещё не сталкивался.
ну всякое может случится. например зенка упадет и статусы так и останутся висеть в таблице. при запуске новые потоки не смогут взять строки в работу, а потоков которые освободят эти строк нет уже в помине. дата позволяет освободить занятые строки, которые неприлично долго заняты. конечно это над делать дополнительную проверку.
Думаю что проще для начала будет разобраться как скопировать все строки в отдельный рабочий список, если этот самый рабочий список пуст. и работать всеми шаблонами чисто брать прокси из рабочего списка с удалением без возврата. минус головная боль по потерянным строкам, только вот момент обновления списка проработать через локирование, что бы только один шаблон делал эту операцию.
 
  • Спасибо
Реакции: loka23

loka23

Client
Регистрация
02.08.2019
Сообщения
127
Благодарностей
10
Баллы
18
лучше все это делать с дополнительными полями. в таблице например. и не удалять а менять статусы у строк с датой изменения статуса и id потока . тогда и будет видно что и где теряется.
список не годится для ограниченного колличества записей. либо нужен еще один список, где ничего не удаляется, а только перекладывается в рабочий список один раз при пустом рабочем списке. тоже все через лок.
Последовал совету с таблицей. При первоначальном запуске "многопоток" из 4 потоков ухватил два раза одну и ту же первую проксю. С таблицами лок работает стандартными кубиками или нужно как то лочить.. привязки к таблице у меня в шаблоне нет. Не нужна ли она? Не совсем понимаю зачем нужна привязка к списку\таблице...
Потом вроде всё выровнилось, благо шаблон не быстрый и на выполнение требуется некоторое время, а изменение статуса в конце.
30мин. работы\удовольствия)) Работает значительно лучше списков и строки никуда не денутся.

Но спустя время что то произошло и таблица стала быть такой. У меня стоит такая логика:
назначение переменной значения "0" - можно так сказать номер прокси, берёт проксю. Если она занята - счётчиком +1 и берёт следующую проксю. Постоянно проверяет это значение, и, если оно =4, то идёт на второй круг искать прокси. Не понимаю как полчилось, что по окончанию работы появилось значение в B6 ячейке.
85968


P.S. работаю сейчас с 4 проксями.
 

Phoenix78

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

loka23

Client
Регистрация
02.08.2019
Сообщения
127
Благодарностей
10
Баллы
18
и вот тут мы плавно подходим к багам зенки :bm:
насколько я работал с таблицами из под зенки , могу сказать, что использование первая строка заголовок может вызвать такой эффект.
но скорее всего это из за того что нет лока на работу с таблицей и на счетчик. кстати непонятно в каком месте счетчик организован.
если таблица не привязана, то как все шаблоны работают с ней ?
Убрал - первую строку - заголовок.
С счётчиком ничего не придумал больше, кроме как в начале шаблона назначать всегда первую прокси и дальше перебором он просто ищет по кругу свободные прокси.
С лишним статусом в таблице нашёл проблему - у меня счётчик если устанавливается цифрой 5, он уходит по BadEnd, а на BadEnd как раз стоит запись в таблицу. Как сделать чтобы на Good/bad end не улетало? У меня только мысль проверять при Bad/Good end переменную(счётчик) и если он =5, то куда нибудь отводим... эти же опции работают единожды в шаблоне вроде.
По поводу привязки таблицы - возможно не так выразился. Таблица привязана к файлу в настройках шаблона. А я про опцию отдельного кубика "работа с таблицами". Но я так понимаю это если в ходе работы шаблона нужно поменять привязку - этим и нужно пользоваться. Верно?) Надо же... только догадался.
85969
 

Phoenix78

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

loka23

Client
Регистрация
02.08.2019
Сообщения
127
Благодарностей
10
Баллы
18
по привязке верно, можно таблицы на лету менять.
красную линию с кубика можно либо отвести на обработку исключения и использовать как элемент логики, либо у кубика поставить свойство Необязательно.
Понял, благодарю. И вот ещё какой вопрос(наверное крайний) - не удаётся выполнить проект. Такая ошибка происходит примерно 1 на 300-400 повторений. Похоже она происходит где то в середине шаблона, потому что статус проксе он присваивает мол занят и далее эта ошибка вываливается. Статус прокси соответственно не меняется на свободный.
Нужно делать принудительное освобождение прокси видимо, как и было указано - по времени. Допустим если поток запущен больше 5мин, то прокся становится свободная. Но может можно определить где эта ошибка возникает и почему?
85970
 

Phoenix78

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

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