Многопоточное взятие из списка

myweb101

Client
Регистрация
29.04.2013
Сообщения
175
Благодарностей
30
Баллы
28
Здравствуйте, суть проблемы такая:
Есть список аккаунтов и проксей к ним по 1000 каждый.
Запускаю шаблон беру один акк и одну проксю из списка, если шаблон не отработал, то добавляю не использованную проксю к этом списку обратно.
Но беда в том, что во многопотоке, если шаблон не выполнился, прокси в список иногда не добаляется по какой-то причине.
То же самое и в БД, поставить метку проксе, что она используется в данный момент, а если не отработала ставить другую. Но если шаблон не выполнился, то и метка остается, что прокси используется.
В шаблоне стоит BAD END но иногда он не выполняется, а прокси уже взята из списка.
Кто как делает, что бы не терялись данные во многопотоке???
 

THE CaHeK

Client
Регистрация
29.01.2016
Сообщения
295
Благодарностей
115
Баллы
43
Вообще желательно,что бы вы сделали один список и присвоили каждому аккаунту свою проксю.
Пример
login;Vasya Pupkin|pass;qwerty|proxy;37.9.40.12:1085.
 
  • Спасибо
Реакции: myweb101

myweb101

Client
Регистрация
29.04.2013
Сообщения
175
Благодарностей
30
Баллы
28
Спасибо. Да я так и сделал.
С другой стороны зайду.
Многопоток. Шаблон.
Берем акк, ставим метку в БД, что он взят, выполняем действия, ставим метку, что они выполнены. Добавляем метку времени к данному акку.
Берем акк с самой старой меткой по времени и без метки, что он взят, ставим метку в БД, что он взят, выполняем действия, ставим метку, что они выполнены. Добавляем метку времени к данному акку.
И так далее.....
Беда в том, что шаблон может не выполниться, инстанс умирает, отключился свет и пр. А у записи стоит метка, что данные акк используется зенкой. Хотя зенка в данный момент не работает.
И так на 1000 просирается 5-6 акков. Через пару суток, все акки стоят в состоянии используется.
У меня конечно есть шаблон, который после остановки основного убирает метки.. но...
 

romanov

Client
Регистрация
14.05.2016
Сообщения
57
Благодарностей
3
Баллы
8
Возможно это связано с тупиковыми ситуациями? Когда 2 и более потока пытаются одновременно обратится к 1 ресурсу, и в итоге ни один ничего не получает.
 

myweb101

Client
Регистрация
29.04.2013
Сообщения
175
Благодарностей
30
Баллы
28
Да нет, я через БД делаю - транзакцией. Проверял на 1м записей, дублей не было при 100 потоках. Даже если на списках делать. Беда наступает, если шаблон вылетел, инстанс сдох, а метка об использовании осталась или со списком, строка взята, шаблон не выполнен, в список обратно не вернулось значение.
Я щас делаю под расписание, один раз в сутки стопаю и проверяю, все ли в порядке. Мне не нравится такое решение, вот и спросил, мож кто элегантнее предложит.
 

DmitryAk

Client
Регистрация
14.12.2016
Сообщения
860
Благодарностей
824
Баллы
93
Я щас делаю под расписание, один раз в сутки стопаю и проверяю, все ли в порядке. Мне не нравится такое решение, вот и спросил, мож кто элегантнее предложит.
Не знаю насколько мое предложение будет элегантнее, но надежнее точно.
Дано: рабочая таблица мониторинга. Поля: ID|идентификатор потока шаблона|timestamp создания (значение по умолчанию current_timestamp).

В начале работы шаблона получаем threadid текущего потока (AppDomain.GetCurrentThreadId().ToString()) и забиваем его в табличку мониторинга.
При заборе акков/проксей и прочих расходников - в столбец блокировки забиваем не метку "занято", а идентификатор из таблички мониторинга.
При завершении шаблона, освобождаем все расходники, где блокировка соответствует нашему идентификатору и удаляем запись о себе из мониторинговой таблицы.
Теперь соль:
Отдельно работает шаблон -воркер- проверятор, который раз в N секунд/минут/часов делает выборку с таблички мониторинга, где
Код:
текущее время - timestamp создания записи > какой-то таймаут
Таймаут выставляем такой как нужно. И для этих записей, которые явно старые и дохлые проделываем такое-же освобождение расходников и удаление строки, как при нормальном завершении шаблона. Т.е. производим все необходимые действия, чтобы нормализовать ситуацию.

В итоге - вырубили ли свет, бомбануло молнией, завис инстанс, жена выключила сервак итд - ресы будут освобождены либо по завершению шаблона, либо по истечению таймаута, либо при первом же проходе воркером (т.к. разница между созданием записи и текущим временем явно будет больше таймаута).
 
  • Спасибо
Реакции: myweb101

Folt

Client
Регистрация
16.12.2016
Сообщения
71
Благодарностей
11
Баллы
8
У меня это реализовано как писалось ранее
Пример
login;Vasya Pupkin|pass;qwerty|proxy;37.9.40.12:1085.
Что мешает сделать отдельный шаблон который будет соединять аккаунты и прокси в один список? Потом (как у меня) чекать их и если, например аккаунту не удалось авторизоваться на сайте по причине бана или неверного пароля, прокси добавляется обратно в список "прокси".
 
  • Спасибо
Реакции: myweb101

THE CaHeK

Client
Регистрация
29.01.2016
Сообщения
295
Благодарностей
115
Баллы
43
У меня это реализовано как писалось ранее

Что мешает сделать отдельный шаблон который будет соединять аккаунты и прокси в один список? Потом (как у меня) чекать их и если, например аккаунту не удалось авторизоваться на сайте по причине бана или неверного пароля, прокси добавляется обратно в список "прокси".
Ничего не мешает, можно и так сделать.
 

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