Проверить прокси, который в текущий момент занят процессом

Axel

Client
Регистрация
20.03.2017
Сообщения
132
Благодарностей
6
Баллы
18
Добрый день,

Запускаю 1 шаблон в 10 потоков, работает с прокси разных источников. По ходу теста выявил что есть пересечения, когда один прокси подхватывается разными потоками, что весьма нежелательно.

Подскажите, возможно ли проверять каждый раз активным потоком шаблона, не используется ли этот прокси в уже запущенных потоках?
 

crocodile

Client
Регистрация
05.10.2019
Сообщения
50
Благодарностей
20
Баллы
8
Как вариант сохранять прокси в список, далее когда берется новый прокси для нового потока проверять если ли такой же прокси уже в списке, если нет - работаем, если есть - заново берем прокси
 

Axel

Client
Регистрация
20.03.2017
Сообщения
132
Благодарностей
6
Баллы
18
Да, как раз только что и поработал с этим вариантом. Как не знаю но он все равно хватает повторно.
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 832
Благодарностей
1 448
Баллы
113
Все всегда зависит от количества прокси и количества потоков. Если потоков меньше, чем прокси, то можно брать из списка по очереди (берем первый, кладем в конец, сохраняем список, следующий поток берет первый, кладет в конец). Если потоков много, то либо через список/таблицу, где добавляем статус прокси (допустим, free/busy). Таким образом берем прокси, у которого free, меняем на busy, в конце работы меняем обратно на free. Ну или по этой же логике через базу данных (будет быстрее и стабильнее).
 
  • Спасибо
Реакции: Sergodjan

Axel

Client
Регистрация
20.03.2017
Сообщения
132
Благодарностей
6
Баллы
18
Да вот потому и пишу здесь что перепробовали уже сохранения. Оно видимо накладывается потоками на файлы и все равно тянет.
 

zarufakis

Client
Регистрация
22.03.2019
Сообщения
1 882
Благодарностей
1 264
Баллы
113
Да вот потому и пишу здесь что перепробовали уже сохранения. Оно видимо накладывается потоками на файлы и все равно тянет.
Попробуй метод предложенный выше, вот код.
C#:
lock (SyncObjects.ListSyncer)
    {
        IZennoList proxyList = project.Lists["proxy"];
        proxyList.Bind(project.Variables["proxy_file"].Value); // Файл с прокси
        string proxy_line = project.Variables["proxy"].Value = proxyList[0].Trim(); // Берем прокси в переменную
        proxyList.RemoveAt(0); // Удаляем первую строку
        proxyList.Add(proxy_line); // Записываем прокси в конец
    }
 

Axel

Client
Регистрация
20.03.2017
Сообщения
132
Благодарностей
6
Баллы
18
Как раз это и делали, не помогает. Час работы и уже три процесса на один прокси повисли :(

Я добавлю, дело в том что к одному списку так или иначе наскакивают разные потоки одного шаблона и параллельно делают как раз что предложено выше. Это совершенно точно - перезаписываются прокси, вдруг из списка начинают пропадать. Этот бардак по идее не должен быть но он есть. И как его обойти непонятно.
 
Последнее редактирование:

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