Решено Получить текущее кол-во потоков в шаблоне C#

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
Прошу реализовать возможность получить кол-во потоков шаблона в текущий момент времени (по факту).
 

rsgmsk

Client
Регистрация
31.07.2019
Сообщения
27
Благодарностей
1
Баллы
3
Годное предложение! А такой еще функции точно нет?
 
  • Спасибо
Реакции: Mikhail B.

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113

luk911

Client
Регистрация
17.01.2013
Сообщения
1 542
Благодарностей
579
Баллы
113
Да да, и еще прям из шаблона добавлять потоки :-) и попытки
 
  • Спасибо
Реакции: Андрейка2020

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
  • Спасибо
Реакции: luk911

luk911

Client
Регистрация
17.01.2013
Сообщения
1 542
Благодарностей
579
Баллы
113
Ну свой класс это как бы тоже костыль конешно, ну да ладно.
 
Регистрация
05.06.2019
Сообщения
570
Благодарностей
453
Баллы
63
Ну свой класс это как бы тоже костыль конешно, ну да ладно.
Извиняюсь за замечание, но вы явно путаете понятие: Костыль и Надстройка.

Костыль — в программировании, быстрое "уродливое" решение проблемы, иначе требующей долгогосрочного и ресурсоемкого исправления.

Надстройка – модификация!
Разработчики ZennoLab предоставили обширное API, которое можно использовать в своих целях.
К примеру метод, для поиска элемента на странице.

instance.ActiveTab.FindElementByXPath("//path", 0);

Нам необходимо всегда указывать номер совпадения, а если, необходима еще доп. логика, к примеру, вставить значение или клик, то это постоянно повторяющийся код. Для этого мы может создать класс MyClass, в нем реализовать метод:

C#:
//field
HtmlElement he;

//.ctor
public MyClass()
{
    he = null;
}

//method
public void ClickByXPath(string xPath, int number = 0)
{
    he = instance.ActiveTab.FindElementByXPath(xPath, number);
    if (he.IsVoid()) throw new Exception("Элементе html не найден! Путь"+ xPath);
    he.Click();
}
И далее, место 3-х постоянно повторяющихся строк, можно использовать: obj.ClickByXPath("//xpath");

Вот вам и надстройка!
 
Регистрация
05.06.2019
Сообщения
570
Благодарностей
453
Баллы
63

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
Проверим. Но уже не сегодня.

UPD1. Спасибо за напоминание.

UPD2. Глянул, в общем он показывает только внутри проекта. А из вне никак не узнать. Не оч удобно получается, учитывая что проверять потоки не такая уж и приоритетная задача лично в моем случае и можно обойтись банально паузой.
 
Последнее редактирование:
  • Спасибо
Реакции: Маломальский
Регистрация
05.06.2019
Сообщения
570
Благодарностей
453
Баллы
63
В общем он показывает только внутри проекта. А из вне никак не узнать.
Тогда было бы очень полезно узнать текущее кол-во потов (из вне), так как сейчас есть идея реализации автонастраиваемого алгоритма, по кол-ву потоков исходя из общей загрузки CPU. И доступ к сетевому монитору, к свойствам всего и максимум соединений и + писал про кол-во прокси в списке живых.

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

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
Тогда было бы очень полезно узнать текущее кол-во потов (из вне), так как сейчас есть идея реализации автонастраиваемого алгоритма, по кол-ву потоков исходя из общей загрузки CPU. И доступ к сетевому монитору, к свойствам всего и максимум соединений и + писал про кол-во прокси в списке живых.

То есть, нажал старт, пошел делать дела, а шаблон автоматически разгоняется по мере доступных ресурсов.
Ну я такой алгоритм и делаю. Получает кол-во строк со списка прокси и запускает необходимое кол-во потоков. Смотрит сколько акков в списке и добавляет нужно кол-во аккаунтов и т.д.

конечно возможно, что прокси не работает, тогда надо допиливать логику)
 
Регистрация
05.06.2019
Сообщения
570
Благодарностей
453
Баллы
63
Ну я такой алгоритм и делаю. Получает кол-во строк со списка прокси и запускает необходимое кол-во потоков. Смотрит сколько акков в списке и добавляет нужно кол-во аккаунтов и т.д.

конечно возможно, что прокси не работает, тогда надо допиливать логику)
Аналогично и вроде здраво, автоматизация, ради автоматизации)

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

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
Аналогично и вроде здраво, автоматизация, ради автоматизации)

Ответ по сообщению: возможно доп. проект "чекер прокси", который оставляет только актуальные в списке.
Цель не повесить случайно 10 акков на одну проксю (условно) + еще хотелось бы сохранять прокси в профиле.
А значит перед тем как открыть сайт, надо:
1) Чекнуть проксю на валид
2) Проверить не используется ли она уже в других потоках.

С первым думаю проблем не будет. А вот для второго мне подсказали такую идею.
Создается БД с строками, время, прокси, статус.
Статус принимает 3 значения: 0, 1, 2.
0 - прокси не используется
1 - используется одним потоком
2 - используется двумя потоками

Соответсвенно когда работа начинается, то шаблон в локе проверяет число. Если оно равно двум, то уходит на паузу. Если там 1 или 0, то он в локе увеличивает счетчик. Когда работа закончена, то счетчик уменьшается. Лучше сразу по GOOD/BAD End`у.
Вот и вопрос с прокси решен)
 

indigo666

Client
Регистрация
10.05.2014
Сообщения
1 093
Благодарностей
344
Баллы
83
А через глобальную переменную нельзя сделать? В виде счетчика. Инстант начал работу - увеличили.

Закончился - не важно где и как ( good end, bad end ) - уменьшили количество. И всегда под рукою будет количество потоков )
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
А через глобальную переменную нельзя сделать? В виде счетчика. Инстант начал работу - увеличили.

Закончился - не важно где и как ( good end, bad end ) - уменьшили количество. И всегда под рукою будет количество потоков )
С глобалками лучше лишний раз не связыватся. Если прервал работу то ничего по Good не пойдет и логика сломается
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 352
Благодарностей
3 279
Баллы
113
Будет в 7.3.0.0.

Оставлю тут:
C#:
int threadsZP = ZennoPoster.GetThreadsCount();
int currentTaskThreadsById = ZennoPoster.GetThreadsCount(Id);
int currentTaskThreadsByName = ZennoPoster.GetThreadsCount(Name);
 
Регистрация
18.05.2017
Сообщения
71
Благодарностей
5
Баллы
8
Не понимаю как им пользоваться? Если просто этот код вставить в кубик, то выдает ошибку(
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113
Не понимаю как им пользоваться? Если просто этот код вставить в кубик, то выдает ошибку(
это пример. а не готовое решение. каждая строка это лишь демонстрация возможности новых методов. да и Id и Name надо заменять на свои.
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
741
Баллы
113

bigloafer

Client
Регистрация
23.07.2020
Сообщения
234
Благодарностей
74
Баллы
28
Будет в 7.3.0.0.

Оставлю тут:
C#:
int threadsZP = ZennoPoster.GetThreadsCount();
int currentTaskThreadsById = ZennoPoster.GetThreadsCount(Id);
int currentTaskThreadsByName = ZennoPoster.GetThreadsCount(Name);
А как узнать сколько выставлено максимальное количество потоков, а не сколько именно в настоящий момент выполняется?
И как изменить это значение?

А если допустим выполняется 10 потоков, и в процессе выполнения скрипта меняется на 9 количество - то поднятый 10 инстанс нормально до своего логического конца доработает или он бросит выполнения после изменения?

У меня в проекте вот такой код:
C#:
var id = Guid.Parse(project.TaskId);
int threadsZP = ZennoPoster.GetThreadsCount(id);

project.SendInfoToLog("Всего потоков: " + threadsZP.ToString(), true);
Выставлено максимально 5 потоков. Добавил 30 заданий. Результат на скриншоте:
Screenshot_4.png
 
Последнее редактирование:
Регистрация
26.05.2020
Сообщения
459
Благодарностей
163
Баллы
43
Будет в 7.3.0.0.

Оставлю тут:
C#:
int threadsZP = ZennoPoster.GetThreadsCount();
int currentTaskThreadsById = ZennoPoster.GetThreadsCount(Id);
int currentTaskThreadsByName = ZennoPoster.GetThreadsCount(Name);
Работает ли? Стопицот тем перечитал об одном и том же, и рабочих решений чет как-то никаких ((( Трудно быть нубом...
 
Регистрация
18.12.2017
Сообщения
61
Благодарностей
48
Баллы
18
Работает ли? Стопицот тем перечитал об одном и том же, и рабочих решений чет как-то никаких ((( Трудно быть нубом...
C#:
var Id = Guid.Parse(project.TaskId); //получаем id шаблона
int currentTaskThreadsById = ZennoPoster.GetThreadsCount(Id); //получаем количество потоков по id шаблона
if (currentTaskThreadsById > 15) ZennoPoster.SetMaxThreads(Id, 15); //если потоков больше 15, то ограничиваем до 15
Работает в самом ZennoPoster или ZennoBox, в ProjectMaker не работает.
 
Регистрация
26.05.2020
Сообщения
459
Благодарностей
163
Баллы
43

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 352
Благодарностей
3 279
Баллы
113
C#:
var Id = Guid.Parse(project.TaskId); //получаем id шаблона
int currentTaskThreadsById = ZennoPoster.GetThreadsCount(Id); //получаем количество потоков по id шаблона
if (currentTaskThreadsById > 15) ZennoPoster.SetMaxThreads(Id, 15); //если потоков больше 15, то ограничиваем до 15
Работает в самом ZennoPoster или ZennoBox, в ProjectMaker не работает.
PM - отдельная программа.
 

_HEDELKA_

Client
Регистрация
20.02.2022
Сообщения
648
Благодарностей
169
Баллы
43
А как узнать сколько выставлено максимальное количество потоков, а не сколько именно в настоящий момент выполняется?
И как изменить это значение?

А если допустим выполняется 10 потоков, и в процессе выполнения скрипта меняется на 9 количество - то поднятый 10 инстанс нормально до своего логического конца доработает или он бросит выполнения после изменения?

У меня в проекте вот такой код:
C#:
var id = Guid.Parse(project.TaskId);
int threadsZP = ZennoPoster.GetThreadsCount(id);

project.SendInfoToLog("Всего потоков: " + threadsZP.ToString(), true);
Выставлено максимально 5 потоков. Добавил 30 заданий. Результат на скриншоте:
Посмотреть вложение 72507
А есть вариант получить это значение:
105636
 

_HEDELKA_

Client
Регистрация
20.02.2022
Сообщения
648
Благодарностей
169
Баллы
43
  • Спасибо
Реакции: lbvf65

санчил

Client
Регистрация
15.04.2016
Сообщения
318
Благодарностей
55
Баллы
28

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