Работа списка в несколько потоков

Nikolai132132

Client
Регистрация
23.10.2017
Сообщения
133
Благодарностей
2
Баллы
18
Думаю я не первый, у кого возникла такая потребность, но ничего не нашел на форуме:
есть список логинов и паролей (около 500). Хочу заходить на сайт с разными аккаунтами во много потоков (5). Знаю, что нужно просто брать логин и пароль из файла с удалением, НО: когда они кончатся, нужно пойти по ним заново! Пытался сделать так: логин и пароль берутся из одного файла, закидываются в другой. Кончается в одном - тогда берется из второго и закидывается в первый обратно. Но не хочу циклить проект в самом себе.
Подскажите, пожалуйста!!
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 362
Благодарностей
5 423
Баллы
113
Брать с начала списка с удалением. Класть в конец списка.

Должно работать в многопотоке. Хотя много раз слышал, что иногда не корректно работает.
 

ТРОН

Client
Регистрация
31.07.2016
Сообщения
336
Благодарностей
379
Баллы
63
Думаю я не первый, у кого возникла такая потребность, но ничего не нашел на форуме:
есть список логинов и паролей (около 500). Хочу заходить на сайт с разными аккаунтами во много потоков (5). Знаю, что нужно просто брать логин и пароль из файла с удалением, НО: когда они кончатся, нужно пойти по ним заново! Пытался сделать так: логин и пароль берутся из одного файла, закидываются в другой. Кончается в одном - тогда берется из второго и закидывается в первый обратно. Но не хочу циклить проект в самом себе.
Подскажите, пожалуйста!!
Данный код необходимо вставить в кубик "Свой код C#" Данная конструкция рассчитана на многопоток. Берет строку из списка, разделяет данные попеременным, записывает взятые изначально данные в конец списка. Если разделение строки по переменным не нужно, то блок кода в середине можно удалить, все будет работать неизменно. Названия списков и переменных можно менять на свои, те, что в квадратных скобках и кавычках.
Код:
lock(SyncObjects.ListSyncer) //Лочим для многопотока
{
//Берем первую строку из списка, кладем ее в переменную и удаляем
var list = project.Lists["Данные"]; //Название списка
project.Variables["result"].Value = list[0]; //Название переменной куда кладется строка
list.RemoveAt(0);

//разбиваем строку из переменной по переменным
string acc_full = project.Variables["result"].Value; //Название переменной данные из которой будут разбиваться в две переменные
var account = acc_full.Split(';').ToList(); // ';' в ковычках находится разделяющий элемент
project.Variables["Email"].Value = account[0]; //Переменная куда кладется часть текста слева
project.Variables["Password"].Value = account[1]; //Переменная куда кладется часть справа

//Дописываем в конец списка данные из переменной
string text = project.Variables["result"].Value;//переменная данные из которой записываются в конец списка
list.Add(text);
}
 
  • Спасибо
Реакции: spy107 и Mikhail B.

Nikolai132132

Client
Регистрация
23.10.2017
Сообщения
133
Благодарностей
2
Баллы
18
Данный код необходимо вставить в кубик "Свой код C#" Данная конструкция рассчитана на многопоток. Берет строку из списка, разделяет данные попеременным, записывает взятые изначально данные в конец списка. Если разделение строки по переменным не нужно, то блок кода в середине можно удалить, все будет работать неизменно. Названия списков и переменных можно менять на свои, те, что в квадратных скобках и кавычках.
Код:
lock(SyncObjects.ListSyncer) //Лочим для многопотока
{
//Берем первую строку из списка, кладем ее в переменную и удаляем
var list = project.Lists["Данные"]; //Название списка
project.Variables["result"].Value = list[0]; //Название переменной куда кладется строка
list.RemoveAt(0);

//разбиваем строку из переменной по переменным
string acc_full = project.Variables["result"].Value; //Название переменной данные из которой будут разбиваться в две переменные
var account = acc_full.Split(';').ToList(); // ';' в ковычках находится разделяющий элемент
project.Variables["Email"].Value = account[0]; //Переменная куда кладется часть текста слева
project.Variables["Password"].Value = account[1]; //Переменная куда кладется часть справа

//Дописываем в конец списка данные из переменной
string text = project.Variables["result"].Value;//переменная данные из которой записываются в конец списка
list.Add(text);
}

Спасибо! Но правильно ли я понимаю, что по сути это то же, что написал предыдущий ответ, только не в двух кубиках операции со списком, а в одном, си шарпе? Просто тогда тоже может быть конфликт потоков, нет?
 

ТРОН

Client
Регистрация
31.07.2016
Сообщения
336
Благодарностей
379
Баллы
63
Спасибо! Но правильно ли я понимаю, что по сути это то же, что написал предыдущий ответ, только не в двух кубиках операции со списком, а в одном, си шарпе? Просто тогда тоже может быть конфликт потоков, нет?
Теоретически конечно все может быть, но чтобы такого не было тут используется следующая конструкция:
Код:
lock(SyncObjects.ListSyncer) //Лочим для многопотока
{
}
Она делает так, чтоб другой поток ждал пока не выполнится текущее действие. Аналог этих двух кубиков в коде:
Код:
lock(SyncObjects.ListSyncer) //Лочим для многопотока
{
//Берем первую строку из списка, кладем ее в переменную и удаляем
var list = project.Lists["Данные"]; //Название списка
project.Variables["result"].Value = list[0]; //Название переменной куда кладется строка
list.RemoveAt(0);
}


lock(SyncObjects.ListSyncer) //Лочим для многопотока
{
//Дописываем в конец списка данные из переменной
string text = project.Variables["result"].Value;//переменная данные из которой записываются в конец списка
list.Add(text);
}
Получается, что если делать кубиками, то изолировано только действие одного кубика, в следствии чего есть вероятность, что получится мешанина. В коде который выше изолировано все от начала взятия строки до записи в конец файла
 
  • Спасибо
Реакции: spy107

Gizmond

Client
Регистрация
18.02.2017
Сообщения
261
Благодарностей
49
Баллы
28
Теоретически конечно все может быть, но чтобы такого не было тут используется следующая конструкция:
Код:
lock(SyncObjects.ListSyncer) //Лочим для многопотока
{
}
Она делает так, чтоб другой поток ждал пока не выполнится текущее действие. Аналог этих двух кубиков в коде:
Код:
lock(SyncObjects.ListSyncer) //Лочим для многопотока
{
//Берем первую строку из списка, кладем ее в переменную и удаляем
var list = project.Lists["Данные"]; //Название списка
project.Variables["result"].Value = list[0]; //Название переменной куда кладется строка
list.RemoveAt(0);
}


lock(SyncObjects.ListSyncer) //Лочим для многопотока
{
//Дописываем в конец списка данные из переменной
string text = project.Variables["result"].Value;//переменная данные из которой записываются в конец списка
list.Add(text);
}
Получается, что если делать кубиками, то изолировано только действие одного кубика, в следствии чего есть вероятность, что получится мешанина. В коде который выше изолировано все от начала взятия строки до записи в конец файла
А как можно сделать , если в списке еще нет данных? Ну т.е суть какая .. Во входных настройках мы указываем папку где лежат все файлы, после чего мы добавляем их в список ( в списке у нас получается будут пути к этим файлам) и потом уже работать с этим списком в многопотоке. Заранее благодарю за ответ -)
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 920
Благодарностей
4 278
Баллы
113
Данный код необходимо вставить в кубик "Свой код C#"
1. Зачем вы плодите сущности? project.Variables["result"].Value, string text - зачем эти переменные?
2. Lock можно ускорить, если вынести за его пределы сплит строки и присвоение её элементов переменным.
 

ТРОН

Client
Регистрация
31.07.2016
Сообщения
336
Благодарностей
379
Баллы
63
1. Зачем вы плодите сущности? project.Variables["result"].Value, string text - зачем эти переменные?
2. Lock можно ускорить, если вынести за его пределы сплит строки и присвоение её элементов переменным.
:D Сейчас я так не делаю, что за некропост, 2 года почти прошло) Помогли бы человеку лучше)

А как можно сделать , если в списке еще нет данных? Ну т.е суть какая .. Во входных настройках мы указываем папку где лежат все файлы, после чего мы добавляем их в список ( в списке у нас получается будут пути к этим файлам) и потом уже работать с этим списком в многопотоке. Заранее благодарю за ответ -)
В зенке есть кубик для этой задачи, "Директории" - "Получить список файлов" и кладите в любой нужный список
 
Последнее редактирование:

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