Число активных потоков проекта

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113


Возможно ли вытащить это число?
Смежные числа вытащить можно из настроек, но это число активных потоков. Варианты с подсчётами не походят.

Сразу другой вопрсо здесь же. Через код есть реализация {-Environment.CurrentUser-} ? В Environment не нашёл
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Накидал специально для тебя :-)
C#:
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>")) {
     int NumberOfTries = Convert.ToInt32(Regex.Match(tasksList[i], @"(?<=NumberOfTries>)\d+(?=</NumberOfTries>)").Value);
     int LimitOfThreads = Convert.ToInt32(Regex.Match(tasksList[i], @"(?<=LimitOfThreads>)\d+(?=</LimitOfThreads>)").Value);
     if (NumberOfTries>LimitOfThreads) {return LimitOfThreads.ToString();} else {return NumberOfTries.ToString();}
   }
}
P.S. В ProjectMaker не работает (по крайней мере на версии 5.9.9.1). Только в Zennoposter.
 
Последнее редактирование:

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Мой герой)
Сейчас буду глядеть

На второй вопрос ответа часом не знаешь?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Накидал специально для тебя :-)
Код:
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>")) {
     int NumberOfTries = Convert.ToInt32(Regex.Match(tasksList[i], @"(?<=NumberOfTries>)\d+(?=</NumberOfTries>)").Value);
     int LimitOfThreads = Convert.ToInt32(Regex.Match(tasksList[i], @"(?<=LimitOfThreads>)\d+(?=</LimitOfThreads>)").Value);
     if (NumberOfTries>LimitOfThreads) {return LimitOfThreads.ToString();} else {return NumberOfTries.ToString();}
   }
}
P.S. В ProjectMaker не работает (по крайней мере на версии 5.9.9.1). Только в Zennoposter.
увы, твой код расчитан на честного оператора, который не будет прописывать разное число потоков)

Суть такова, что оператор может запустить 100 потоков, дождаться, пока они заполнятся, и сбросить лимит потоков до 10. Таким образом мы будем получать число 10, но на самом деле активных потоков 100
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
увы, твой код расчитан на честного оператора, который не будет прописывать разное число потоков)

Суть такова, что оператор может запустить 100 потоков, дождаться, пока они заполнятся, и сбросить лимит потоков до 10. Таким образом мы будем получать число 10, но на самом деле активных потоков 100
Не понял, что за "честный оператор".
Объясни конкретнее, подгоню код под твои нужды.
На второй вопрос ответа часом не знаешь?
Если бы знал, ответил :-)
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Не понял, что за "честный оператор".
Объясни конкретнее, подгоню код под твои нужды.

Если бы знал, ответил :-)
Пример. Я запускаю шаблон в 10 потоков. Когда они набрались - у меня выходит 10 активных потоков. Я уменьшаю число потоков до 5. Но в обработки у меня всё ещё висит 10 активных потоков ведь. А скрипт вернёт 5.
Т.е. мне надо знать, сколько в данный момент времени шаблон использует потоков. Не максимальное число потоков, не число заданий, а текущее активное число потоков
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Пример. Я запускаю шаблон в 10 потоков. Когда они набрались - у меня выходит 10 активных потоков. Я уменьшаю число потоков до 5. Но в обработки у меня всё ещё висит 10 активных потоков ведь. А скрипт вернёт 5.
Т.е. мне надо знать, сколько в данный момент времени шаблон использует потоков. Не максимальное число потоков, не число заданий, а текущее активное число потоков
То есть тебе девятку нужно вернуть (из данного примера)?
Код:
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], @"(?<=NumberOfTries>)\d+(?=</NumberOfTries>)").Value;
   }
}
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
То есть тебе девятку нужно вернуть (из данного примера)?
Код:
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], @"(?<=NumberOfTries>)\d+(?=</NumberOfTries>)").Value;
   }
}
нужна девятка, а код отдаёт число заданий (15 на скрине). Я ведь почему за помощью обратися. Эти фокусы с парсингом я знаю. Но для парсинга доступны только настройки проекта. Там тебе и число заданий, и макс число потоков. А то число, которое мне нужно, оно уже при работе считается. Насколько я знаю, парсингом настроек преокта его не достать. ВОт и думал, может есть другие методы
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
нужна девятка, а код отдаёт число заданий (15 на скрине). Я ведь почему за помощью обратися. Эти фокусы с парсингом я знаю. Но для парсинга доступны только настройки проекта. Там тебе и число заданий, и макс число потоков. А то число, которое мне нужно, оно уже при работе считается. Насколько я знаю, парсингом настроек преокта его не достать. ВОт и думал, может есть другие методы
Я привел код, который вернет "девятку".
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Он возвращает текущее число попыток
Вот, что ты со мной споришь :-)

У проекта есть два <NumberOfTries>

Один лежит внутри <ExecutionSettings>, это число потоков.
А второй в <SchedulerSettings> - число заданий.
Мой код как раз забирает только первое значение. Ты либо не пробовал, либо имеются какие-то различия в структуре настроек (из-за разных версий).
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Выполни этот код:
Код:
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>")) {
     var result = Regex.Matches(tasksList[i], @"(?<=NumberOfTries>)\d+(?=</NumberOfTries>)");
     return result[0].ToString()+" | "+result[1].ToString();
   }
}
И скажи, с какой стороны в возвращаемом значении относительно | будет нужный результат.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Выполни этот код:
Код:
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>")) {
     var result = Regex.Matches(tasksList[i], @"(?<=NumberOfTries>)\d+(?=</NumberOfTries>)");
     return result[0].ToString()+" | "+result[1].ToString();
   }
}
И скажи, с какой стороны в возвращаемом значении относительно | будет нужный результат.
конечно, я пробовал. Смотри сам. Я задал 20 заданий
4 выполнения показали такие логи
 
  • Спасибо
Реакции: maxim.gutareff

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Бред какой-то :-)
У тебя какая версия ZennoPoster?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
5.9.9.0
Вот шаблон для теста, можешь сам попробовать
 

Вложения

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
  • Спасибо
Реакции: doc

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
В общем, ещё раз взглянул на свой код и тестируемые шаблоны.
Мой код из второго поста действительно работает, при условии, что число "макс. потоков" не изменяется в меньшую сторону, чем текущее кол-во уже работающих потоков.

Что касается моего сообщения про:
У проекта есть два <NumberOfTries>

Один лежит внутри <ExecutionSettings>, это число потоков.
А второй в <SchedulerSettings> - число заданий.
Мой код как раз забирает только первое значение. Ты либо не пробовал, либо имеются какие-то различия в структуре настроек (из-за разных версий).
Я здесь вообще неправ.
Первое отвечает за кол-во заданий, а второе так же за кол-во заданий, но внутри планировщика. Я этим методом пользовался ранее на шаблонах, где кол-во заданий всегда совпадало с максимальным и работало в цикле нон-стопом, поэтому у меня сложилось ложное впечатление, что этот параметр отвечает на прямую за кол-во активных потоков :-)

Так что извиняюсь :-)
 
  • Спасибо
Реакции: doc

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 912
Баллы
113
  • Спасибо
Реакции: doc

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 912
Баллы
113

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Для проекта ничего специального нет.
Можно вот эту тему посмотреть, может что-то полезное есть - http://zennolab.com/discussion/threads/vzjat-imja-vypolnjaemogo-shablona.9838/#post-57706
Увы, оттуда можно вытащить только то, что задано в настройках проекта, расписании и т.д.
Жаль, ну да ладно
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Может, как вариант, через глобальную переменную счетчик сделать или через файл? В начале проекта +1, по завершению - минус 1.
 
Последнее редактирование:

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Для проекта ничего специального нет.
Можно вот эту тему посмотреть, может что-то полезное есть - http://zennolab.com/discussion/threads/vzjat-imja-vypolnjaemogo-shablona.9838/#post-57706
А могу ли я узнать какому проекту пренадлежит инстанс, зная его порт?

Может, как вариант, через глобальную переменную счетчик сделать или через файл?
Не надёжно. Оператор может рубануть выполнение и счётчик уже будет иметь некорректное значение
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
  • Спасибо
Реакции: doc

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 912
Баллы
113
Ну это решение тоже не очень, т.к. работает только с включенным браузером.
Есть ещё вот такое решение - http://zennolab.com/discussion/threads/vzjat-imja-vypolnjaemogo-shablona.9838/#post-57269

А могу ли я узнать какому проекту пренадлежит инстанс, зная его порт?
Тоже нет к сожалению, project и instance не связаны.
 
  • Спасибо
Реакции: Dimionix и doc

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
doc, а для чего тебе нужно знать количество активных потоков, если не секрет? Как это вообще можно использовать? Мне кажется, что с этим значением вообще сложно работать, т.к. оно постоянно меняется в зависимости от времени стартования отдельных потоков и каких-нибудь зависаний.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
doc, а для чего тебе нужно знать количество активных потоков, если не секрет? Как это вообще можно использовать? Мне кажется, что с этим значением вообще сложно работать, т.к. оно постоянно меняется в зависимости от времени стартования отдельных потоков и времени их выполнения.
управление числом потоков на проданных шаблонах
 
  • Спасибо
Реакции: Dimionix

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