- Регистрация
- 30.03.2012
- Сообщения
- 8 685
- Благодарностей
- 4 641
- Баллы
- 113
А-а, ну значит небольшой +/- в количестве активных потоков особо не напрягает?управление числом потоков на проданных шаблонах
лимит обходится каким-нибудь батником или другим шаблономА-а, ну значит небольшой +/- в количестве активных потоков особо не напрягает?
Выставлять лимит на максимум потоков не вариант?
Может можно как-то залочить это действие?лимит обходится каким-нибудь батником или другим шаблоном
мне кажется, это запрос ещё жестче, чем мой изначальный)Может можно как-то залочить это действие?
Может, но, как вариант, в принципе имеет место бытьмне кажется, это запрос ещё жестче, чем мой изначальный)
ну я за это и говорил. Количество потоков можно будет повышать батником, другим шаблономМожно просто в начале шаблона проверять максимальное количество потоков и если оно больше определенного числа, то снижать или сразу нах отправлять (завершать).
Так я понял, но т.к. количество потоков проверяется в начале шаблона, то вообще пофиг, сколько попытаются зарядить через батник, больше заданного количества работать не будут. Точнее будут запускаться, но сразу завершаться... с сообщением типа "Товарищ, а вы случаем не ох*ели, Вам же сказали, что максимум n потоков))".ну я за это и говорил. Количество потоков можно будет повышать батником, другим шаблоном
например, я запустил 100 потоков на запросах. Они все подхватились считай в один момент. 1й поток проверил лимит, увидел сотню, понизил до 10. Остальные 99 потоков увидели лимит 10 и успешно пошли далее.Так я понял, но т.к. количество потоков проверяется в начале шаблона, то вообще пофиг, сколько попытаются зарядить через батник, больше заданного количества работать не будут.
Почему бы тогда не сделать через БД?
Не того уровня задача, чтобы ради неё такие костыли городить)Почему бы тогда не сделать через БД?
Добавить столбец int thread, где значение по умолчанию - кол-во максимальных потоков. Пусть это будет 5.
При запуске шаблон проверят пользователя в таблице (создает или продолжает работу с ним) -> Чекаем thread > 0, а далее вычитаем 1 ед.
Да бы избежать недоразумений при остановке шаблоне или прерывании, сделать ещё один столбец, в котором будет храниться unix время последнего действия.
Ну да, согласен, в этом случае спасет глобальный счетчик. А вариант с завершением потока (+ можно добавить уменьшение максимального количества на единицу) или остановкой проекта и выводом сообщения сработает и, думаю, он самый простой.например, я запустил 100 потоков на запросах. Они все подхватились считай в один момент. 1й поток проверил лимит, увидел сотню, понизил до 10. Остальные 99 потоков увидели лимит 10 и успешно пошли далее.
Теория
не должно. Потому что 100й поток увидит сотню и обрубится. 99й увидит 99 активных и т.д.Ну да, согласен, в этом случае спасет глобальный счетчик. А вариант с завершением потока (+ можно добавить уменьшение максимального количества на единицу) или остановкой проекта и выводом сообщения сработает и, думаю, он самый простой.
ЗЫ. А разве в варианте с количеством активных потоков такой проблемы не возникнет?
Вот ещё вариант можешь попробоватьПриветствую. Тоже столкнулся с такой задачей. Все таки у вас получилось вернуть количество активных потоков?
string task_name = TextProcessing.ToUpper(project.Name.Replace(".xmlz",""),"All"); //Сюда впиши название проекта, информацию по которому нужно получить, заменив project.Name.Replace(".xmlz",""), т.к. данная функция даёт количество активных потоков по текущему проекту
List<string> stats = ZennoPoster.TasksList.ToList();
for(int i = 0; stats.Count>i; i++)
{
if(task_name==TextProcessing.ToUpper(Regex.Match(stats[i].ToString(),@"(?<=<Name>).*?(?=</Name>)").ToString(),"All"))
{
string potok = Regex.Match(stats[i].ToString(),@"(?<=<LimitOfThreads>).*?(?=</LimitOfThreads>)").ToString();
// project.SendErrorToLog(TextProcessing.ToUpper(Regex.Match(stats[i].ToString(),@"(?<=<Name>).*?(?=</Name>)").ToString(),"All")+" - активных потоков "+potok,true);
return potok;
}
}
Просто дня три рою, как вытащить колво активных потоков!!! Спасибо за постВот ещё вариант можешь попробовать
Код:string task_name = TextProcessing.ToUpper(project.Name.Replace(".xmlz",""),"All"); //Сюда впиши название проекта, информацию по которому нужно получить, заменив project.Name.Replace(".xmlz",""), т.к. данная функция даёт количество активных потоков по текущему проекту List<string> stats = ZennoPoster.TasksList.ToList(); for(int i = 0; stats.Count>i; i++) { if(task_name==TextProcessing.ToUpper(Regex.Match(stats[i].ToString(),@"(?<=<Name>).*?(?=</Name>)").ToString(),"All")) { string potok = Regex.Match(stats[i].ToString(),@"(?<=<LimitOfThreads>).*?(?=</LimitOfThreads>)").ToString(); // project.SendErrorToLog(TextProcessing.ToUpper(Regex.Match(stats[i].ToString(),@"(?<=<Name>).*?(?=</Name>)").ToString(),"All")+" - активных потоков "+potok,true); return potok; } }
Просто дня три рою, как вытащить колво активных потоков!!! Спасибо за пост
ааа, не фигня.. максимальное колво потоков возвращает, а не активныхВот ещё вариант можешь попробовать
Код:string task_name = TextProcessing.ToUpper(project.Name.Replace(".xmlz",""),"All"); //Сюда впиши название проекта, информацию по которому нужно получить, заменив project.Name.Replace(".xmlz",""), т.к. данная функция даёт количество активных потоков по текущему проекту List<string> stats = ZennoPoster.TasksList.ToList(); for(int i = 0; stats.Count>i; i++) { if(task_name==TextProcessing.ToUpper(Regex.Match(stats[i].ToString(),@"(?<=<Name>).*?(?=</Name>)").ToString(),"All")) { string potok = Regex.Match(stats[i].ToString(),@"(?<=<LimitOfThreads>).*?(?=</LimitOfThreads>)").ToString(); // project.SendErrorToLog(TextProcessing.ToUpper(Regex.Match(stats[i].ToString(),@"(?<=<Name>).*?(?=</Name>)").ToString(),"All")+" - активных потоков "+potok,true); return potok; } }
Вот доработанная версия, сделал @bsgun (telegram)ааа, не фигня.. максимальное колво потоков возвращает, а не активных
string task_name = TextProcessing.ToUpper(project.Name.Replace(".xmlz",""),"All"); // Получаем текущее имя проекта, из которого выполняется код.
// string task_name = "ROUNDCUBE"; // Сюда впиши название проекта, который ищем. При этом варианте можно мониторить кол-во потоков нужного проекта из другого шаба.
List<string> stats = ZennoPoster.TasksList.ToList();
for(int i = 0; stats.Count>i; i++)
{
if(task_name==TextProcessing.ToUpper(Regex.Match(stats[i].ToString(),@"(?<=<Name>).*?(?=</Name>)").ToString(),"All"))
{
string potok = Regex.Match(stats[i].ToString(),@"(?<=<LimitOfThreads>).*?(?=</LimitOfThreads>)").ToString();
// project.SendErrorToLog(TextProcessing.ToUpper(Regex.Match(stats[i].ToString(),@"(?<=<Name>).*?(?=</Name>)").ToString(),"All")+" - активных потоков "+potok,true); // Раскомментируй эту строку, если нужно чтобы в лог выводились данные с названием проекта и кол-вом потоков.
return potok;
}
}
Спасибо, будем посмотреть.. Тот код возвращал именно макс потоков.., гонял и с активными и с безактивными )Вот доработанная версия, сделал @bsgun (telegram)
Код:string task_name = TextProcessing.ToUpper(project.Name.Replace(".xmlz",""),"All"); // Получаем текущее имя проекта, из которого выполняется код. // string task_name = "ROUNDCUBE"; // Сюда впиши название проекта, который ищем. При этом варианте можно мониторить кол-во потоков нужного проекта из другого шаба. List<string> stats = ZennoPoster.TasksList.ToList(); for(int i = 0; stats.Count>i; i++) { if(task_name==TextProcessing.ToUpper(Regex.Match(stats[i].ToString(),@"(?<=<Name>).*?(?=</Name>)").ToString(),"All")) { string potok = Regex.Match(stats[i].ToString(),@"(?<=<LimitOfThreads>).*?(?=</LimitOfThreads>)").ToString(); // project.SendErrorToLog(TextProcessing.ToUpper(Regex.Match(stats[i].ToString(),@"(?<=<Name>).*?(?=</Name>)").ToString(),"All")+" - активных потоков "+potok,true); // Раскомментируй эту строку, если нужно чтобы в лог выводились данные с названием проекта и кол-вом потоков. return potok; } }
У тебя либо максимальное количество потоков = активному количеству потоков, либо активное количество потоков = оставшемуся количеству попыток
Смотри переменную stats.ToString(), парси её как тебе нужно и вычисляй
http://joxi.ru/KAgjQ3LCEDJya2 этим кодом возвращает при любом раскладе 35, что есть максимальное число потоковВот доработанная версия, сделал @bsgun (telegram)
Код:string task_name = TextProcessing.ToUpper(project.Name.Replace(".xmlz",""),"All"); // Получаем текущее имя проекта, из которого выполняется код. // string task_name = "ROUNDCUBE"; // Сюда впиши название проекта, который ищем. При этом варианте можно мониторить кол-во потоков нужного проекта из другого шаба. List<string> stats = ZennoPoster.TasksList.ToList(); for(int i = 0; stats.Count>i; i++) { if(task_name==TextProcessing.ToUpper(Regex.Match(stats[i].ToString(),@"(?<=<Name>).*?(?=</Name>)").ToString(),"All")) { string potok = Regex.Match(stats[i].ToString(),@"(?<=<LimitOfThreads>).*?(?=</LimitOfThreads>)").ToString(); // project.SendErrorToLog(TextProcessing.ToUpper(Regex.Match(stats[i].ToString(),@"(?<=<Name>).*?(?=</Name>)").ToString(),"All")+" - активных потоков "+potok,true); // Раскомментируй эту строку, если нужно чтобы в лог выводились данные с названием проекта и кол-вом потоков. return potok; } }
У тебя либо максимальное количество потоков = активному количеству потоков, либо активное количество потоков = оставшемуся количеству попыток
Смотри переменную stats.ToString(), парси её как тебе нужно и вычисляй