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

  • Автор темы Автор темы doc
  • Дата начала Дата начала

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Реакции
4 652
Баллы
113
ee732480aac1b1c7c427dd5592d97103.png


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

Сразу другой вопрсо здесь же. Через код есть реализация {-Environment.CurrentUser-} ? В Environment не нашёл
 
Накидал специально для тебя :-)
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.
 
Последнее редактирование:
Накидал специально для тебя :-)
Код:
Развернуть Свернуть Копировать
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
 
увы, твой код расчитан на честного оператора, который не будет прописывать разное число потоков)

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

Если бы знал, ответил :-)
Пример. Я запускаю шаблон в 10 потоков. Когда они набрались - у меня выходит 10 активных потоков. Я уменьшаю число потоков до 5. Но в обработки у меня всё ещё висит 10 активных потоков ведь. А скрипт вернёт 5.
Т.е. мне надо знать, сколько в данный момент времени шаблон использует потоков. Не максимальное число потоков, не число заданий, а текущее активное число потоков
e33f0baf1b1ba03222d66b3b41bcdf22.png
 
Пример. Я запускаю шаблон в 10 потоков. Когда они набрались - у меня выходит 10 активных потоков. Я уменьшаю число потоков до 5. Но в обработки у меня всё ещё висит 10 активных потоков ведь. А скрипт вернёт 5.
Т.е. мне надо знать, сколько в данный момент времени шаблон использует потоков. Не максимальное число потоков, не число заданий, а текущее активное число потоков
e33f0baf1b1ba03222d66b3b41bcdf22.png
То есть тебе девятку нужно вернуть (из данного примера)?
Код:
Развернуть Свернуть Копировать
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;
   }
}
 
То есть тебе девятку нужно вернуть (из данного примера)?
Код:
Развернуть Свернуть Копировать
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 на скрине). Я ведь почему за помощью обратися. Эти фокусы с парсингом я знаю. Но для парсинга доступны только настройки проекта. Там тебе и число заданий, и макс число потоков. А то число, которое мне нужно, оно уже при работе считается. Насколько я знаю, парсингом настроек преокта его не достать. ВОт и думал, может есть другие методы
 
нужна девятка, а код отдаёт число заданий (15 на скрине). Я ведь почему за помощью обратися. Эти фокусы с парсингом я знаю. Но для парсинга доступны только настройки проекта. Там тебе и число заданий, и макс число потоков. А то число, которое мне нужно, оно уже при работе считается. Насколько я знаю, парсингом настроек преокта его не достать. ВОт и думал, может есть другие методы
Я привел код, который вернет "девятку".
 
Он возвращает текущее число попыток
Вот, что ты со мной споришь :)

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

Один лежит внутри <ExecutionSettings>, это число потоков.
А второй в <SchedulerSettings> - число заданий.
Мой код как раз забирает только первое значение. Ты либо не пробовал, либо имеются какие-то различия в структуре настроек (из-за разных версий).
 
Выполни этот код:
Код:
Развернуть Свернуть Копировать
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();
   }
}

И скажи, с какой стороны в возвращаемом значении относительно | будет нужный результат.
 
Выполни этот код:
Код:
Развернуть Свернуть Копировать
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 выполнения показали такие логи
043149b665527aa628db93adc2877b18.png
 
  • Спасибо
Реакции: maxim.gutareff
Бред какой-то :)
У тебя какая версия ZennoPoster?
 
  • Спасибо
Реакции: doc
В общем, ещё раз взглянул на свой код и тестируемые шаблоны.
Мой код из второго поста действительно работает, при условии, что число "макс. потоков" не изменяется в меньшую сторону, чем текущее кол-во уже работающих потоков.

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

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

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

Так что извиняюсь :-)
 
  • Спасибо
Реакции: doc
Для проекта ничего специального нет.
Можно вот эту тему посмотреть, может что-то полезное есть - http://zennolab.com/discussion/threads/vzjat-imja-vypolnjaemogo-shablona.9838/#post-57706
Увы, оттуда можно вытащить только то, что задано в настройках проекта, расписании и т.д.
Жаль, ну да ладно
 
Может, как вариант, через глобальную переменную счетчик сделать или через файл? В начале проекта +1, по завершению - минус 1.
 
Последнее редактирование:
Для проекта ничего специального нет.
Можно вот эту тему посмотреть, может что-то полезное есть - http://zennolab.com/discussion/threads/vzjat-imja-vypolnjaemogo-shablona.9838/#post-57706
А могу ли я узнать какому проекту пренадлежит инстанс, зная его порт?

Может, как вариант, через глобальную переменную счетчик сделать или через файл?
Не надёжно. Оператор может рубануть выполнение и счётчик уже будет иметь некорректное значение
 
  • Спасибо
Реакции: doc
Ну это решение тоже не очень, т.к. работает только с включенным браузером.
Есть ещё вот такое решение - http://zennolab.com/discussion/threads/vzjat-imja-vypolnjaemogo-shablona.9838/#post-57269

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

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