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

Alisa Bodrova

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

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

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

Буду благодарна за подсказку O:)
 

Ахилес

Client
Регистрация
11.11.2020
Сообщения
889
Благодарностей
366
Баллы
63
что бы что то исправить, сначала надо понять как сделано.... потому что способов взять профиль в работу воз и маленькая тележка....
у меня в одном проекте через базу данных сделано.... у вас так же ?
 

Ribas

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

Alisa Bodrova

Client
Регистрация
08.12.2023
Сообщения
87
Благодарностей
54
Баллы
18
что бы что то исправить, сначала надо понять как сделано.... потому что способов взять профиль в работу воз и маленькая тележка....
у меня в одном проекте через базу данных сделано.... у вас так же ?
 

Вложения

Alisa Bodrova

Client
Регистрация
08.12.2023
Сообщения
87
Благодарностей
54
Баллы
18
Создайте список, который привязан к файлу (можно также через БД реализовать) в который записывается профиль который взят в работу. И проверяйте через него профили которые в работе. По GoodEnd/BadEnd профиль из списка взятых в работу удаляется.
Очень приблизительно, но работать будет точно. Многопотока такая схема не боится.
Спасибо, ваш вариант звучит отлично) Сейчас поищу как это реализовать
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 385
Благодарностей
475
Баллы
83
  • Спасибо
Реакции: Alisa Bodrova

Ахилес

Client
Регистрация
11.11.2020
Сообщения
889
Благодарностей
366
Баллы
63
Получить список файлов - не является потокобезопасным. Его необходимо переписать на C# с использованием локов.
Удаление дублей - не является потокобезопасным. его так же впихнуть внутрь лока.

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

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

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

если будете с базой работать... там тоже самое надо реализовывать... ну единственное что там проще, то это можно при обновлении таблицы с профилями поставить игнор обновления записи при конфликте по ключу, что как раз позволяет обойтись без дополнительных проверок наличия профиля в базе. ну и ротацию профилей в базе удобнее делать, просто меняя статус записи. Не забудьте использовать лок в базе, если он есть или так же лок в проекте, если база не поддерживает лок таблицы/записи.
 
  • Спасибо
Реакции: Alisa Bodrova

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Чисто по логике, не хватает дополнительной ветки логики, где обновлялся бы список профилей, с проверкой на наличие взятых профилей с диска на наличие в целевом списке. если есть, то не добавлять, если нет, то добавлять. ну и естественно все это должно быть в локе.
Решением будет использование таблицы со списком профилей и меткой "в работе" а также занесением даты когда последний раз использовался профиль что бы не брать в работу одни и те же. Ну и крутить этот список по кругу как проститутку. ))))
 
  • Спасибо
Реакции: Alisa Bodrova

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 385
Благодарностей
475
Баллы
83
тоесть список всегда будет одинаковым для всех потоков и потоки всегда будет брать один и тот же профиль.... первый
Изначальный список профилей не нужно привязывать к файлу, дублей не будет, брать из этого списка строку, которая не существует в списке рабочих профилей. Ваша реализация безусловно оберегает от ошибок, но, как мне каежтся, это слишком избыточно для поставленной задачи.
 
  • Спасибо
Реакции: Alisa Bodrova

Ахилес

Client
Регистрация
11.11.2020
Сообщения
889
Благодарностей
366
Баллы
63
Решением будет использование таблицы со списком профилей и меткой "в работе" а также занесением даты когда последний раз использовался профиль что бы не брать в работу одни и те же. Ну и крутить этот список по кругу как проститутку. ))))
это как в базе... но логику обновления списка профилей, все равно надо будет реализовывать... особенно если количество профилей не статичная величина.
 

Ахилес

Client
Регистрация
11.11.2020
Сообщения
889
Благодарностей
366
Баллы
63
Изначальный список профилей не нужно привязывать к файлу, дублей не будет, брать из этого списка строку, которая не существует в списке рабочих профилей. Ваша реализация безусловно оберегает от ошибок, но, как мне каежтся, это слишком избыточно для поставленной задачи.
какая разница, в каком месте проверять наличие профиля в целевом списке.... при загрузке профилей в целевой список или при взятии из темпового списка с проверкой на наличие в целевом ?
как говорят, хрен редьки не слаще... тем более если список темповый и не привязан, то тут даже лок не поможет... у каждого потока будет своя копия списка файлов и всегда начинаться с начала... в любом случае сначала надо занести темповые данные в целевой список, а уже в нем делать ротацию с локом.
 
  • Спасибо
Реакции: Alisa Bodrova

Alisa Bodrova

Client
Регистрация
08.12.2023
Сообщения
87
Благодарностей
54
Баллы
18
Реализация максимально простая, там пара кубиков собственно
пока что не поняла как применить в моей ситуации, ведь эти экшены при завершении всех действий выполняются
 

Alisa Bodrova

Client
Регистрация
08.12.2023
Сообщения
87
Благодарностей
54
Баллы
18
Получить список файлов - не является потокобезопасным. Его необходимо переписать на C# с использованием локов.
Удаление дублей - не является потокобезопасным. его так же впихнуть внутрь лока.
я бы с удовольствием так и сделала, но пока что не пишу C#
 

Alisa Bodrova

Client
Регистрация
08.12.2023
Сообщения
87
Благодарностей
54
Баллы
18
Решением будет использование таблицы со списком профилей и меткой "в работе" а также занесением даты когда последний раз использовался профиль что бы не брать в работу одни и те же. Ну и крутить этот список по кругу как проститутку. ))))
:D спасибо за вариант. буду разбираться
 

heks

Client
Регистрация
01.10.2013
Сообщения
1 088
Благодарностей
263
Баллы
83
1. берешь профиль в работу.
2.переносишь его в папку работа
3. так пока профили в папке не закончатся.
4. Профили закончатся когда удаляешь папку из которой брались профили переименовываешь папку работа в нужную папку.продолжаешь работать
в конце можно сделать профили что бы сохранялись только а не переносить как написано в пункте 2
или что то такое сделать

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

TommyTuta

Client
Регистрация
02.10.2022
Сообщения
111
Благодарностей
49
Баллы
28
del
 

Alisa Bodrova

Client
Регистрация
08.12.2023
Сообщения
87
Благодарностей
54
Баллы
18
В итоге реализовала так:

116554


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

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

Alisa Bodrova

Client
Регистрация
08.12.2023
Сообщения
87
Благодарностей
54
Баллы
18

Alisa Bodrova

Client
Регистрация
08.12.2023
Сообщения
87
Благодарностей
54
Баллы
18
С пополнением списка прокси разобралась так:

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

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

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

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

WTD

Новичок
Регистрация
08.02.2024
Сообщения
11
Благодарностей
1
Баллы
3
С пополнением списка прокси разобралась так:

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

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

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

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

Alisa Bodrova

Client
Регистрация
08.12.2023
Сообщения
87
Благодарностей
54
Баллы
18
Добрый день, могу попросить вас приложить часть с реализацией замены профиля?
117651


117652


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

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

WTD

Новичок
Регистрация
08.02.2024
Сообщения
11
Благодарностей
1
Баллы
3

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) и тд, в конце выполнения программы наверное можно добавить сохранение профиля в эту же папку(но тут точно не знаю, может сломать логику, я сохраняю просто в другую, через обновить и сохранить профиль(не кодом))
 

Alisa Bodrova

Client
Регистрация
08.12.2023
Сообщения
87
Благодарностей
54
Баллы
18
Вопрос был в том как загрузить профили из папки по порядку для каждой задачи.
Значит на вопрос я ответила скринами выше. Только в работе над списком надо поставить брать не Случайную строку, а первую. Когда загруженный список закончится, с помощью "Получить список файлов" автоматически загрузится список профилей и они пойдут в работу по-очереди.
 

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