Параллельные запросы

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
В текстовом файле 1000 аккаунтов, делаю паралельный запрос в 100 потоков, берём с файла йди и выполняем какие то действия
Вопрос: как взять следующий акаунт поток который звыершил действия. У меня сейчас получается так, например 100 потоков сразу стартанули все действия выполнили и выход, ломаю голову и чего то не получается
 

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
Ничего не понятно, надо сделать переход многопоток => однопоток?
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
РМ у нас однопоточный, я использую метод Parallel, запускаю на РМ 100 потоков, а в файле у меня логинов 1000, после 100 проходов потоки выходят с кубика, как мне сделать что бы вернуть потоки в начало
 

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
РМ у нас однопоточный, я использую метод Parallel, запускаю на РМ 100 потоков, а в файле у меня логинов 1000, после 100 проходов потоки выходят с кубика, как мне сделать что бы вернуть потоки в начало
На первый взгляд посчитать сколько строк всего, поделить на количество потоков, и это число использовать в цикле for (получится 10 итераций цикла)
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
На первый взгляд посчитать сколько строк всего, поделить на количество потоков, и это число использовать в цикле for (получится 10 итераций цикла)
Так оно примерно сейчас так и получается, только с кубика выходит, ждёт пока все потоки не завершатся, как только все потоки завершили работу выходит по гуд и снова берёт 100 потоков, а как сделать что бы при завершении внутри цикла всего одного, двух и т.д. потоков брало опять не ждало завершения, например сто потоков, один завершился и тут же вернулся за акаунтом, как закончившемуся потоку передать что ему в начало надо)))
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 035
Благодарностей
8 941
Баллы
113
Так оно примерно сейчас так и получается, только с кубика выходит, ждёт пока все потоки не завершатся, как только все потоки завершили работу выходит по гуд и снова берёт 100 потоков, а как сделать что бы при завершении внутри цикла всего одного, двух и т.д. потоков брало опять не ждало завершения, например сто потоков, один завершился и тут же вернулся за акаунтом, как закончившемуся потоку передать что ему в начало надо)))
ух ты, йо-майо, :-) это хак года - как из ПM сделать еще один ЗП Про.. :-)
или из ЗП Лайт сделать ЗП Про..
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 035
Благодарностей
8 941
Баллы
113

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
ну это я РМ просто проверяю, если на ЗП и на сервере то намного наверно больше вытянет)
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Что пропали разберающиеся в коде), ещё такой вопрос, запускаю 10 потоков и каждый поток в одном месте должен одновременно пройти по N++ колличеству ссылок, сылки делаются из йди и получается общее колличество, но почему у меня получается 10 ссылок а переходы всё время нарастают, переходы получается что считаются по номеру в списке, если это ссылка третья то один поток 3 раза по ней идёт, если 10 то 10 раз, общее выходит из 10 сылок чуть не сто переходов сразу, почему так может быть ??? Что не так я делаю
 

budora

Client
Регистрация
13.08.2012
Сообщения
831
Благодарностей
555
Баллы
93

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 035
Благодарностей
8 941
Баллы
113
Что пропали разберающиеся в коде), ещё такой вопрос, запускаю 10 потоков и каждый поток в одном месте должен одновременно пройти по N++ колличеству ссылок, сылки делаются из йди и получается общее колличество, но почему у меня получается 10 ссылок а переходы всё время нарастают, переходы получается что считаются по номеру в списке, если это ссылка третья то один поток 3 раза по ней идёт, если 10 то 10 раз, общее выходит из 10 сылок чуть не сто переходов сразу, почему так может быть ??? Что не так я делаю
это оборотная сторона параллельных запросов..
(шутка)

хоть бы код показал.. :-)
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
ну весь код это 1000 строк и уже почти проект, вот кусок его где я получаю ссылки и после делаю параллельный запрос
C#:
var pages = new List<object>().Select(t => new { USERID = default(string), Page = default(string) }).ToList();
int qw=0;
var page = "";
var userId = "";
for(int l=0; l<id_list_cnt; l++)
{
    page = "";
    userId = "";
    userId = idlist[l];
    userId = userId.Trim();
    page = "https://asdf.ru/asdf/"+userId+"/";
    pages.Add(new {USERID = userId, Page = page});
}
кто понимает не думаю что все 1000 строк надо
P.S. Если ссылки получаю в цикле то переходы получаются намного больше, если в этом варианте то по последней сылке например 10 раз переходит, а не по разным 10 сразу
 

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
ну весь код это 1000 строк и уже почти проект, вот кусок его где я получаю ссылки и после делаю параллельный запрос
C#:
var pages = new List<object>().Select(t => new { USERID = default(string), Page = default(string) }).ToList();
int qw=0;
var page = "";
var userId = "";
for(int l=0; l<id_list_cnt; l++)
{
    page = "";
    userId = "";
    userId = idlist[l];
    userId = userId.Trim();
    page = "https://asdf.ru/asdf/"+userId+"/";
    pages.Add(new {USERID = userId, Page = page});
}
кто понимает не думаю что все 1000 строк надо
P.S. Если ссылки получаю в цикле то переходы получаются намного больше, если в этом варианте то по последней сылке например 10 раз переходит, а не по разным 10 сразу
Не работал с этим делом поэтому на пальцах не подскажу. В теории надо примерно так сделать - одна часть C# кода "подкидывает дрова", а вторая их "топит", подкидывание происходит по мере работы "топки". При такой архитектуре первый освободившийся поток берёт свободное задание и с ним работает. То есть получается некий генератор заданий, и некий обработчик который эти задания исполняет.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Не работал с этим делом поэтому на пальцах не подскажу. В теории надо примерно так сделать - одна часть C# кода "подкидывает дрова", а вторая их "топит", подкидывание происходит по мере работы "топки". При такой архитектуре первый освободившийся поток берёт свободное задание и с ним работает. То есть получается некий генератор заданий, и некий обработчик который эти задания исполняет.
Оказывается дров мало было )) накидал с горой и заработало, 100 потоков плюс к каждому по 100 переходов, но вот как вернуть закончившийся поток за следующим аккаунтом понять не могу
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Интересная штука получается, всё работало и вдруг резко всё медным тазом накрылось, делаю параллельный запрос в 50 потоков и следом второй, всё отрабатывало отлично, сейчас первый запрос проходит а второй все 50 потоков с одним мылом, там нечего менять даже что бы перепутать, что какое то обновление зенно на лету происходит о котором мы не знаем , почему перестало работать??? Решил потоки снизить и попробывать на двух и такая же ересь, два запроса с одним мылом
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 884
Баллы
113
Кстати тоже обращал внимание, что бывают какие то сказачные приколы. Сегодня всё работает, а завтра прихожу на работу и всё не работает. Тоже посещали мысли, что зенка как то на лету обновляется.
Так ли это?

П.с. Обновления для винды отключены, так что пинать на подтянутые обновы фрэймворка или еще чего не стоит.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 035
Благодарностей
8 941
Баллы
113
Кстати тоже обращал внимание, что бывают какие то сказачные приколы. Сегодня всё работает, а завтра прихожу на работу и всё не работает. Тоже посещали мысли, что зенка как то на лету обновляется.
Так ли это?

П.с. Обновления для винды отключены, так что пинать на подтянутые обновы фрэймворка или еще чего не стоит.
зенка на лету не обновляется, но могут обновлять серверный компилятор..
может готовят новый билд и что то там тронули заранее..
надеюсь завтра придет rostonix и скажет, что это бред чистой воды..
я даже не обижусь.. :ah:
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
зенка на лету не обновляется, но могут обновлять серверный компилятор..
может готовят новый билд и что то там тронули заранее..
надеюсь завтра придет rostonix и скажет, что это бред чистой воды..
я даже не обижусь.. :ah:
ну с проста ведь не может резко перестать работать, я тоже примерно ответ знаю что обнов ни каких типо нет смотрите у себя шаблон, а чё его смотреть если всё работало и резко пиндец пришёл, честно уже пол шаблона разобрал и бесполезно
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 712
Баллы
113
Компилятор на сервере может быть подкорректирован без переустановки программы. Но C# экшен не меняется, я имею ввиду стандартные экшены.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Компилятор на сервере может быть подкорректирован без переустановки программы. Но C# экшен не меняется, я имею ввиду стандартные экшены.
Причину как бы обнаружил, но почему только так стало работать, получается делаю параллельный запрос с lock и тогда идёт только по порядку но пока каждый поток не выполнит какое то действие, а до этого 300 потоков параллельно запускал и всё нормально было, сейчас 50 запускаю и сидишь ждёшь пока обработается, в чём может быть причина изменения ???
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 712
Баллы
113
а смысл лока в чем, если не ограничивать выполнение кода одним потоком?
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
а смысл лока в чем, если не ограничивать выполнение кода одним потоком?
lock ставлю что бы данные не путались, до этого без лока всё нормально было, а сейчас белиберда получается пять потоков могут схватить одно мыло и регаться, хотя ничего не менял до этого
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
При перехвате try{} catch{} выдаёт вот такие ошибки
1.Exception :: Коллекция была изменена; невозможно выполнить операцию перечисления.
2."Exception :: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index "
3.Exception :: Ссылка на объект не указывает на экземпляр объекта.
Кодом пытаюсь порлучить номер строки ошибки, но всё время выдаёт 0, почитал об этом и написано что должна быть подключенна отладочная инфа, а как это сделать самостоятельно если это возможно так как не могу понять где такие ошибки могут выскочить, уже многое поперепробывал а они всё равно выскакивают
C#:
try
{
       //код
}
catch (Exception e)
{
    var st = new System.Diagnostics.StackTrace(e, true);
    var frame = st.GetFrame(0);
    int line = frame.GetFileLineNumber();
    project.SendInfoToLog("", "Exception :: "+e.Message+" :: строка :: "+line.ToString(), true);
}
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 712
Баллы
113
Такая конструкция работать не будет, т.к. ZennoPoster получает весь проект в виде кода, который ничего не скажет.
Проекты в постере компилируются, а не интерпретируются
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Такая конструкция работать не будет, т.к. ZennoPoster получает весь проект в виде кода, который ничего не скажет.
Проекты в постере компилируются, а не интерпретируются
Почти день убил на эти поиски, нашёл где эти ошибки выскакивают, пришлось чуть не каждые десять строк оборачивать в try{} catch{}, неудобно конечно по поиску ошибок
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
пишите в код, креаторе, там дебаггер есть
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113

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