Как добавить(+1)/уменьшить(-1) количество потоков в процессе выполнения?

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
30
Баллы
28
В настройках создания батника есть возможность установить конкретное значение количества потоков. А как добавить +1 поток к текущему количеству? И как уменьшить? Вероятно, через C# код, подскажите, пожалуйста как именно.
 

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
30
Баллы
28
Спасибо большое за указанное направление :-)

Поскольку чукча не программист знаний не хватает в таких вещах, тяжко пользоваться подобной документацией, хотелось бы конкретный пример на С# :-) Поделитесь, пожалуйста, если это, конечно, сравнительно не сложная задача (для моего уровня, например, весьма сложная).

В идеале, чтобы использовался по имени, а не по id, т.к. насколько я понимаю id проекта меняется после правки в PM
 
Последнее редактирование:

ZHAG

Client
Регистрация
01.05.2014
Сообщения
228
Благодарностей
216
Баллы
43
чукча не программист
Поможем малочисленным народам крайнего севера. :D
Код:
string settings = "<LimitOfThreads>1</LimitOfThreads>" //этот параметр устанавливает нужное число потоков, соответственно тебе их нужно указать
                + "<MaxAllowOfThreads>0</MaxAllowOfThreads>"
                + "<DoneSuccesfully>0</DoneSuccesfully>"
                + "<DoneAll>0</DoneAll>"
                + "<NumberOfTries>0</NumberOfTries>" // это число выполнений
                + "<LastNumberOfTries>0</LastNumberOfTries>"
                + "<Priority>50</Priority>"
                + "<Proxy>{DoNotUseProxy, IfPossible, UseProxyWithoutRemove, UseProxy}</Proxy>"
                + "<Status>Newbie</Status>"
                + "<ProxyLabels></ProxyLabels>"
                + "<ShouldBeExecutedRandomly>{True, False}</ShouldBeExecutedRandomly>"
                + "<GroupLabels>Без метки</GroupLabels>"
                + "<GroupStates>Выполнены</GroupStates>"
                + "<MaxNumOfSuccesStop>-1</MaxNumOfSuccesStop>"
                + "<MaxNumOfFailStop>-1</MaxNumOfFailStop>"
                + "<NumOfFailStop>0</NumOfFailStop>";


ZennoPoster.SetExecutionSettings(Guid.Parse(project.TaskId), settings); // применит настройки к текущему шаблону
ZennoPoster.SetExecutionSettings("НазваниеШаблона", settings); // применит настройки к шаблону по имени
 
  • Спасибо
Реакции: Alex733 и Enigma

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
30
Баллы
28
Ух ты:-) Спасибо, начинает что-то вырисовываться!
Похоже, в параметр LimitOfThreads нужно указать конкретное число потоков (по аналогии с настройками при создании батника).
А как именно добавить/отнять 1 поток? Нужно для начала получить текущее количество потоков, затем прибавить/отнять 1, положить получившееся число в переменную и вставить в приведенный код выше?
 

DmitryAk

Client
Регистрация
14.12.2016
Сообщения
863
Благодарностей
784
Баллы
93
Если управление текущим шабом, то проще так:
Добавить 1 поток
C#:
var id = Guid.Parse(project.TaskId);
ZennoPoster.AddTries(id, 1);
Обнулить кол-во
C#:
var id = Guid.Parse(project.TaskId);
ZennoPoster.SetTries(id, 0);
Установить 5 потоков исполнения
C#:
var id = Guid.Parse(project.TaskId);
ZennoPoster.SetTries(id, 5);
PS: так довольно удобно рулить кол-вом потоков на основе данных из бд.
Запустили один поток - он получил из бд кол-во данных которое надо обработать и установил себе это кол-во. Ессно необходимо учесть блокировку запрашиваемых данных и шаб должен быть не зациклен.. т.е получил данные для обработки - обработал - завершился.
 

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
30
Баллы
28
Не могу понять, как получить актуальное количество работающих потоков в переменную. Не всех проектов, а конкретного, по имени шаблона. Кучу тем уже перерыл, но везде мысль либо не закончена, либо пути ведут снова на "страшные" страницы документации :-)
 

ZHAG

Client
Регистрация
01.05.2014
Сообщения
228
Благодарностей
216
Баллы
43
  • Спасибо
Реакции: stud

ZHAG

Client
Регистрация
01.05.2014
Сообщения
228
Благодарностей
216
Баллы
43
как получить актуальное количество потоков в переменную
List<string> xmlList = ZennoPoster.TasksList().ToList();

дальше перебираешь все элементы списка а содержание нужного тебе названия.
потом делаешь запрос настроек

string xml = ZennoPoster.GetTaskInfo(Guid.Parse("GUID"));
 
  • Спасибо
Реакции: evgen_po

DmitryAk

Client
Регистрация
14.12.2016
Сообщения
863
Благодарностей
784
Баллы
93
AddTries- это добавление нужного количества выполнений!
SetTries - это установка нужного количества выполнений!
Разница в сленге). Для меня "установить кол-во потоков" = "установить кол-во выполнений".
Добавить потоков и установить максимум потоков - это разные вещи, прекрасно это понимаю)
 

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
30
Баллы
28
Всем спасибо за ответы.
Пока что остановился на таком варианте.

Сначала подсчитываю актуальное количество потоков, сохраняю в переменную potokov_now

Код:
var tasksList = new List<string>(ZennoPoster.TasksList);
var id = new Guid(project.TaskId);
for (int i=0; i<tasksList.Count; i++) {
   if (tasksList[i].Contains("<Id>"+id +"</Id>")) {
     return Regex.Match(tasksList[i], @"(?<=LimitOfThreads>)\d+(?=</LimitOfThreads>)").Value;
   }
}

Прибавляю единицу (либо отнимаю, в зависимости от ситуации), получаю переменную potokov_nado

Затем запускаю батник, прописывая переменные нужного количества потоков и имени проекта:


Пока все устраивает, кроме одного момента. Иногда прямо очень нужно узнать актуальное количество потоков соседнего проекта (а не текущего), т.е. по имени проекта, а не по id. Люди добрые, плиз, скиньте рабочий код для получения кол-ва потоков по имени проекта (выше код для получения по TaskId). Кусками кода из документации пользоваться не умею, к сожалению.
 
  • Спасибо
Реакции: Donalddick

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
30
Баллы
28
AddTries- это добавление нужного количества выполнений!
SetTries - это установка нужного количества выполнений!
Очень жаль, что не существует какого-нибудь MinusTries, чтобы можно было онять нужное количество выполнений:-)
 

doc

Client
Регистрация
30.03.2012
Сообщения
7 956
Благодарностей
4 049
Баллы
113
Очень жаль, что не существует какого-нибудь MinusTries, чтобы можно было онять нужное количество выполнений:-)
от текущего трайс отнимаешь свой МнусТрайс и получаешь число для СетТрайс)
 

DmitryAk

Client
Регистрация
14.12.2016
Сообщения
863
Благодарностей
784
Баллы
93
Чуть чуть математики и SetTries

Ну и можно минусовое значение в AddTries передать.. хз правда сработает ли - лень проверять.

Иногда прямо очень нужно узнать актуальное количество потоков соседнего проекта
Готовый код не дам, но направлю:
Получаем список проектов, перебираем их ищем поле Name если оно соответствует имени шаба - проверяем ExecutionSettings.NumberOfTries - это и есть кол-во исполнений
 

[Pacman]

Client
Регистрация
29.05.2017
Сообщения
277
Благодарностей
168
Баллы
43
В настройках создания батника есть возможность установить конкретное значение количества потоков. А как добавить +1 поток к текущему количеству? И как уменьшить? Вероятно, через C# код, подскажите, пожалуйста как именно.
Есть готовое решение.
В бенчмарке от Lord_Alfred реализовано, ставишь 1 поток, а шаблон сам запускает количество потоков равное количеству процессоров.
Можно разобрать шаблон и подсмотреть нужное.
http://zennolab.com/discussion/threads/testirovanie-proizvoditelnosti-zennoposter-zennojsbench-u-kogo-moschnee-server.39798/
 

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
30
Баллы
28
от текущего трайс отнимаешь свой МнусТрайс и получаешь число для СетТрайс)
Это понятно, я так и делаю сейчас:-) Тогда и AddTries ни к чему (грубо говоря), можно ж аналогично через арифметику и SetTries обыграть:-)
 
Последнее редактирование:

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
30
Баллы
28
Чуть чуть математики и SetTries

Ну и можно минусовое значение в AddTries передать.. хз правда сработает ли - лень проверять.
К сожалению, не сработало :-) В зенке меньше нуля не дает установить попытки, а если отредактировать батник, то в итоге установится непосредственно "-1".

Чуть чуть математики и SetTries

Готовый код не дам, но направлю:
Получаем список проектов, перебираем их ищем поле Name если оно соответствует имени шаба - проверяем ExecutionSettings.NumberOfTries - это и есть кол-во исполнений
А как получить список проектов? Код, который выше предоставил ZHAG, у меня выполняется выполняется с ошибкой (видимо, нужно еще какие-то параметры указать, а я ж бамбук, просто копипаст делаю):

Код:
List<string> xmlList = ZennoPoster.TasksList().ToList();
 

doc

Client
Регистрация
30.03.2012
Сообщения
7 956
Благодарностей
4 049
Баллы
113
Это понятно, я так и делаю сейчас:-) Тогда и AddTries ни к чему (грубо говоря), можно ж аналогично через арифметику и SetTries обыграть:-)
да, но добавить число попыток задача куда более востребована, чем отнять
 

ZHAG

Client
Регистрация
01.05.2014
Сообщения
228
Благодарностей
216
Баллы
43
  • Спасибо
Реакции: Enigma

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
30
Баллы
28
Ошибку действительно не выдает теперь. Теперь не пойму, как этот код использовать на практике. В какой список добавится информация, нужно ли объявить имя списка в коде? Вроде простая задача, а я застрял в ней из-за непонимания базовых вещей, сорри. Когда вы скидываете "направление", явно рассчитываете на хотя бы средний уровень знаний кода, но спешу Вас разочаровать :bh:
И еще: в PM этот код должен ведь сработать, получит ли он информацию от запущенного ZP?
 

ZHAG

Client
Регистрация
01.05.2014
Сообщения
228
Благодарностей
216
Баллы
43
И еще: в PM этот код должен ведь сработать, получит ли он информацию от запущенного ZP?
да получит.
Когда вы скидываете "направление", явно рассчитываете на хотя бы средний уровень знаний кода, но спешу Вас разочаровать :bh:
Ну дружища..... у тебя есть 2 пути:
1. забить на свою хотелку.
2. Учить базис програмирования :-)

Из той инфы которую тебе здесь предоставили можно уже собрать шаблон упровляющий всеми остальными :-).
 
  • Спасибо
Реакции: DmitryAk

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
30
Баллы
28
Из той инфы которую тебе здесь предоставили можно уже собрать шаблон упровляющий всеми остальными :-).
Для этого мне как раз не хватает пару паззлов :-) Закрыть их и тогда картинка сложится ;-) Если не сложно, сориентируйте, пожалуйста, по этому вопросу:

"В какой список добавится информация, нужно ли объявить имя списка в коде?"
 

DmitryAk

Client
Регистрация
14.12.2016
Сообщения
863
Благодарностей
784
Баллы
93
Когда вы скидываете "направление", явно рассчитываете на хотя бы средний уровень знаний кода, но спешу Вас разочаровать :bh:
Какой средний? Это даже на кубиках собрать можно и парой строчек на шарпе.
В общем путь осилит идущий..
 

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
30
Баллы
28
Код:
List<string> xmlList = ZennoPoster.TasksList.ToList();
Объясните плиз на пальцах где сохраняется инфа после выполнения этого кода. Переменная возвращает "ok".
 

linkod

Пользователь
Регистрация
11.10.2018
Сообщения
118
Благодарностей
1
Баллы
16
Апну тему немного.

1) как распарсить список? В данном случае для выявления Id по и имени. В т.ч. сложность из-за пункта 2.
2) там несколько Id указано. Брать первый?
 

linkod

Пользователь
Регистрация
11.10.2018
Сообщения
118
Благодарностей
1
Баллы
16
Вот пример строки списка. Естественно там все не отформатировано, а в одну строку уложено. )

Код:
<Id>d568a8dd-92d2-41db-98a3-bd6597d10812</Id>
<Name>project</Name>
<IsNewbie>True</IsNewbie>
<IsEnable>True</IsEnable>
<CreateTime>01/01/2019 20:50:36</CreateTime>
<SettingsType>None</SettingsType>

<ExecutionSettings>
    <Id>e9950807-dc9d-4216-a614-2ea84b6c6471</Id>
    <LimitOfThreads>1</LimitOfThreads>
    <MaxAllowOfThreads>0</MaxAllowOfThreads>
    <DoneSuccesfully>4</DoneSuccesfully>
    <DoneAll>4</DoneAll>
    <NumberOfTries>96</NumberOfTries>
    <LastNumberOfTries>100</LastNumberOfTries>
    <Priority>50</Priority>
    <Proxy>DoNotUseProxy</Proxy>
    <Status>Perform</Status>
    <ProxyLabels></ProxyLabels>
    <ShouldBeExecutedRandomly>False</ShouldBeExecutedRandomly>
    <GroupLabels></GroupLabels>
    <GroupStates>Выполняются</GroupStates>
    <MaxNumOfSuccesStop>-1</MaxNumOfSuccesStop>
    <Timeout>-1</Timeout>
    <MaxNumOfFailStop>-1</MaxNumOfFailStop>
    <NumOfFailStop>0</NumOfFailStop>
    <ShowTask>False</ShowTask>
    <TraceTask>False</TraceTask>
</ExecutionSettings>

<SchedulerSettings>
    <Id>f750b50f-6cdc-4a01-b893-b61a72fad438</Id>
    <StartDate>01/02/2019 20:50:00</StartDate>
    <ShedulerOnDate>01/02/2019 13:29:00</ShedulerOnDate>
    <EndDate>01/01/2020 20:50:00</EndDate>
    <RepetitionCount>1</RepetitionCount>
    <ScheduleType>EveryDays</ScheduleType>
    <RepeatType>WithoutEnd</RepeatType>
    <ActivateTime>01/01/0001 10:00:00</ActivateTime>
    <ActivateWorkTime>01/01/0001 00:00:00</ActivateWorkTime>
    <IsActive>True</IsActive>
    <NumberOfTries>100</NumberOfTries>
    <Minutes>1</Minutes>
    <Days>1</Days>
    <LastScheduleDate>01/01/0001 00:00:00</LastScheduleDate>
    <NextScheduleDate>01/03/2019 10:00:00</NextScheduleDate>
    <IsClearSucces>False</IsClearSucces>
    <GroupName></GroupName>
</SchedulerSettings>

<TriggerSettings>
    <Id>c9382794-e262-45b3-a659-54f896c38876</Id>
    <CheckFileExistanse>False</CheckFileExistanse>
    <CheckFilePath></CheckFilePath>
    <RemoveCheckFile>True</RemoveCheckFile>
    <NumberOfTries>0</NumberOfTries>
    <IsClearSucces>False</IsClearSucces>
</TriggerSettings>

<Project>
    <ProjectFileLocation>C:\Users\Egor\Documents\ZennoLab\projects\project.xmlz</ProjectFileLocation>
    <ProjectType>Assembly</ProjectType>
</Project>

<PurchaseState>None</PurchaseState>
 
Последнее редактирование:

molotok

Client
Регистрация
17.04.2015
Сообщения
689
Благодарностей
310
Баллы
63
А максимум потоков можно регулировать из кода? На подобии как добавлять исполнения.

Я так понимаю можно установить все настройки для шаблона вместе с максимумом потоков, но нет возможности регулировать максимум потоков отдельно.

ZennoPoster_2019-07-28_13-11-39.png
 

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