Как подгружать профили по порядку из папки? Много-поток

Alisa Bodrova

Client
Регистрация
08.12.2023
Сообщения
281
Реакции
94
Баллы
28
Всем привет. Подскажите, пожалуйста, как реализовать загрузку профилей в много-потоке, если надо:

- брать профиль
- работать с ним
- закончить работу, но не удалять профиль из папки
- брать следующий и тд.

Также сложность в том, что в других потоках дублируется профиль и работа идет одновременно в одном и том же аккаунте, что надо исправить.

Буду благодарна за подсказку O:)
 
что бы что то исправить, сначала надо понять как сделано.... потому что способов взять профиль в работу воз и маленькая тележка....
у меня в одном проекте через базу данных сделано.... у вас так же ?
 
Создайте список, который привязан к файлу (можно также через БД реализовать) в который записывается профиль который взят в работу. И проверяйте через него профили которые в работе. По GoodEnd/BadEnd профиль из списка взятых в работу удаляется.
Очень приблизительно, но работать будет точно. Многопотока такая схема не боится.
 
  • Оценить
Реакции: Alisa Bodrova
что бы что то исправить, сначала надо понять как сделано.... потому что способов взять профиль в работу воз и маленькая тележка....
у меня в одном проекте через базу данных сделано.... у вас так же ?
 

Вложения

  • Screenshot_65.png
    Screenshot_65.png
    20,5 KB · Просмотры: 164
Создайте список, который привязан к файлу (можно также через БД реализовать) в который записывается профиль который взят в работу. И проверяйте через него профили которые в работе. По GoodEnd/BadEnd профиль из списка взятых в работу удаляется.
Очень приблизительно, но работать будет точно. Многопотока такая схема не боится.
Спасибо, ваш вариант звучит отлично) Сейчас поищу как это реализовать
 
  • Оценить
Реакции: Alisa Bodrova
Получить список файлов - не является потокобезопасным. Его необходимо переписать на C# с использованием локов.
Удаление дублей - не является потокобезопасным. его так же впихнуть внутрь лока.

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

Получение и добавление строк - возможно потокобезопасны... но без настроек используемого списка фиг его знает. я бы на C# сделал внутри лока

Чисто по логике, не хватает дополнительной ветки логики, где обновлялся бы список профилей, с проверкой на наличие взятых профилей с диска на наличие в целевом списке. если есть, то не добавлять, если нет, то добавлять. ну и естественно все это должно быть в локе.

если будете с базой работать... там тоже самое надо реализовывать... ну единственное что там проще, то это можно при обновлении таблицы с профилями поставить игнор обновления записи при конфликте по ключу, что как раз позволяет обойтись без дополнительных проверок наличия профиля в базе. ну и ротацию профилей в базе удобнее делать, просто меняя статус записи. Не забудьте использовать лок в базе, если он есть или так же лок в проекте, если база не поддерживает лок таблицы/записи.
 
  • Оценить
Реакции: Alisa Bodrova
Чисто по логике, не хватает дополнительной ветки логики, где обновлялся бы список профилей, с проверкой на наличие взятых профилей с диска на наличие в целевом списке. если есть, то не добавлять, если нет, то добавлять. ну и естественно все это должно быть в локе.
Решением будет использование таблицы со списком профилей и меткой "в работе" а также занесением даты когда последний раз использовался профиль что бы не брать в работу одни и те же. Ну и крутить этот список по кругу как проститутку. ))))
 
  • Оценить
Реакции: Alisa Bodrova
тоесть список всегда будет одинаковым для всех потоков и потоки всегда будет брать один и тот же профиль.... первый
Изначальный список профилей не нужно привязывать к файлу, дублей не будет, брать из этого списка строку, которая не существует в списке рабочих профилей. Ваша реализация безусловно оберегает от ошибок, но, как мне каежтся, это слишком избыточно для поставленной задачи.
 
  • Оценить
Реакции: Alisa Bodrova
Решением будет использование таблицы со списком профилей и меткой "в работе" а также занесением даты когда последний раз использовался профиль что бы не брать в работу одни и те же. Ну и крутить этот список по кругу как проститутку. ))))
это как в базе... но логику обновления списка профилей, все равно надо будет реализовывать... особенно если количество профилей не статичная величина.
 
Изначальный список профилей не нужно привязывать к файлу, дублей не будет, брать из этого списка строку, которая не существует в списке рабочих профилей. Ваша реализация безусловно оберегает от ошибок, но, как мне каежтся, это слишком избыточно для поставленной задачи.
какая разница, в каком месте проверять наличие профиля в целевом списке.... при загрузке профилей в целевой список или при взятии из темпового списка с проверкой на наличие в целевом ?
как говорят, хрен редьки не слаще... тем более если список темповый и не привязан, то тут даже лок не поможет... у каждого потока будет своя копия списка файлов и всегда начинаться с начала... в любом случае сначала надо занести темповые данные в целевой список, а уже в нем делать ротацию с локом.
 
  • Оценить
Реакции: Alisa Bodrova
Реализация максимально простая, там пара кубиков собственно
пока что не поняла как применить в моей ситуации, ведь эти экшены при завершении всех действий выполняются
 
Получить список файлов - не является потокобезопасным. Его необходимо переписать на C# с использованием локов.
Удаление дублей - не является потокобезопасным. его так же впихнуть внутрь лока.
я бы с удовольствием так и сделала, но пока что не пишу C#
 
Решением будет использование таблицы со списком профилей и меткой "в работе" а также занесением даты когда последний раз использовался профиль что бы не брать в работу одни и те же. Ну и крутить этот список по кругу как проститутку. ))))
:D спасибо за вариант. буду разбираться
 
1. берешь профиль в работу.
2.переносишь его в папку работа
3. так пока профили в папке не закончатся.
4. Профили закончатся когда удаляешь папку из которой брались профили переименовываешь папку работа в нужную папку.продолжаешь работать
в конце можно сделать профили что бы сохранялись только а не переносить как написано в пункте 2
или что то такое сделать
3199082606.png

при отработке последнего ака очищаешь список просто. брать аки тут нужно строго попорядку
 
Последнее редактирование:
  • Оценить
Реакции: one и Alisa Bodrova
В итоге реализовала так:

116554


Другие варианты не совсем поняла как сделать.

Вот только теперь такую схему надо с txt доком сделать, где прокси лежат)) А мою схему уже не применишь
 
С пополнением списка прокси разобралась так:

1. Работа со списками - выбрать нужный список - получать первую строку из списка и удалять после взятия - создать переменную
2. Работа со списками - выбрать тот же список - добавить текст - и в поле внести созданную переменную - галочка "добавлять в конец"

При этом в настройках самого списка отметить галочку "Сохранять изменения в файл". Тогда получится обновляемый бесконечный список. Надеюсь, что на потоках сработает)) На одном все ок.

Спасибо всем за подсказки!

UPD: На потоках все хорошо работает.
 
Последнее редактирование:
С пополнением списка прокси разобралась так:

1. Работа со списками - выбрать нужный список - получать первую строку из списка и удалять после взятия - создать переменную
2. Работа со списками - выбрать тот же список - добавить текст - и в поле внести созданную переменную - галочка "добавлять в конец"

При этом в настройках самого списка отметить галочку "Сохранять изменения в файл". Тогда получится обновляемый бесконечный список. Надеюсь, что на потоках сработает)) На одном все ок.

Спасибо всем за подсказки!

UPD: На потоках все хорошо работает.
Добрый день, могу попросить вас приложить часть с реализацией замены профиля?
 
Добрый день, могу попросить вас приложить часть с реализацией замены профиля?
117651


117652


Надеюсь, в таком виде будет понятно. Если нет, пишите. Постараюсь иначе помочь.

Пока отвечала, запуталась какой у вас вопрос)) Насчет пополнения списков или замены? Вы комментируете одну ситуацию, а спрашиваете про другую. Если ответила не правильно, то сформулируйте вопрос еще раз.
 
Последнее редактирование:

C#:
Развернуть Свернуть Копировать
string directoryPath = @"C:\Users\USERNAME\Desktop\Профили";

string[] profileFiles = Directory.GetFiles(directoryPath, "*.zpprofile");



// Переменная для отслеживания индекса текущего файла

int currentFileIndex = 0;



// Проверяем, есть ли файлы в папке и индекс находится в пределах длины массива

if (profileFiles.Length > 0 && currentFileIndex < profileFiles.Length)

{

string currentProfileFile = profileFiles[currentFileIndex];

string path = Path.Combine(project.Directory, currentProfileFile);

project.Profile.Load(path);



// Выполняйте действия с загруженным профилем здесь



// Удаляем только текущий файл профиля после его использования

File.Delete(currentProfileFile);



// Увеличиваем индекс для следующей загрузки

currentFileIndex++;

}
Посмотреть вложение 117651

Посмотреть вложение 117652

Надеюсь, в таком виде будет понятно. Если нет, пишите. Постараюсь иначе помочь.

Пока отвечала, запуталась какой у вас вопрос)) Насчет пополнения списков или замены? Вы комментируете одну ситуацию, а спрашиваете про другую. Если ответила не правильно, то сформулируйте вопрос еще раз.
Вопрос был в том как загрузить профили из папки по порядку для каждой задачи, но я решил проблему так, берем из папки профиль в работу и удаляем его из этой папки, при следующем страте добавляем +1( то есть берем профиль номер 2) и тд, в конце выполнения программы наверное можно добавить сохранение профиля в эту же папку(но тут точно не знаю, может сломать логику, я сохраняю просто в другую, через обновить и сохранить профиль(не кодом))
 
Вопрос был в том как загрузить профили из папки по порядку для каждой задачи.
Значит на вопрос я ответила скринами выше. Только в работе над списком надо поставить брать не Случайную строку, а первую. Когда загруженный список закончится, с помощью "Получить список файлов" автоматически загрузится список профилей и они пойдут в работу по-очереди.
 

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