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

  • Автор темы Автор темы Mikhail B.
  • Дата начала Дата начала

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 449
Реакции
5 477
Баллы
113
Прошу реализовать возможность получить кол-во потоков шаблона в текущий момент времени (по факту).
 
Годное предложение! А такой еще функции точно нет?
 
  • Спасибо
Реакции: Mikhail B.
Да да, и еще прям из шаблона добавлять потоки :-) и попытки
 
  • Спасибо
Реакции: Андрейка2020
Ну свой класс это как бы тоже костыль конешно, ну да ладно.
 
Ну свой класс это как бы тоже костыль конешно, ну да ладно.

Извиняюсь за замечание, но вы явно путаете понятие: Костыль и Надстройка.

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

Надстройка – модификация!
Разработчики 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");

Вот вам и надстройка!
 
Проверим. Но уже не сегодня.

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

UPD2. Глянул, в общем он показывает только внутри проекта. А из вне никак не узнать. Не оч удобно получается, учитывая что проверять потоки не такая уж и приоритетная задача лично в моем случае и можно обойтись банально паузой.
 
Последнее редактирование:
  • Спасибо
Реакции: Маломальский
В общем он показывает только внутри проекта. А из вне никак не узнать.

Тогда было бы очень полезно узнать текущее кол-во потов (из вне), так как сейчас есть идея реализации автонастраиваемого алгоритма, по кол-ву потоков исходя из общей загрузки CPU. И доступ к сетевому монитору, к свойствам всего и максимум соединений и + писал про кол-во прокси в списке живых.

То есть, нажал старт, пошел делать дела, а шаблон автоматически разгоняется по мере доступных ресурсов.
 
Тогда было бы очень полезно узнать текущее кол-во потов (из вне), так как сейчас есть идея реализации автонастраиваемого алгоритма, по кол-ву потоков исходя из общей загрузки CPU. И доступ к сетевому монитору, к свойствам всего и максимум соединений и + писал про кол-во прокси в списке живых.

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

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

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

Аналогично и вроде здраво, автоматизация, ради автоматизации)

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

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

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

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

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

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

Оставлю тут:
C#:
Развернуть Свернуть Копировать
int threadsZP = ZennoPoster.GetThreadsCount();
int currentTaskThreadsById = ZennoPoster.GetThreadsCount(Id);
int currentTaskThreadsByName = ZennoPoster.GetThreadsCount(Name);
 
Не понимаю как им пользоваться? Если просто этот код вставить в кубик, то выдает ошибку(
 
Не понимаю как им пользоваться? Если просто этот код вставить в кубик, то выдает ошибку(
это пример. а не готовое решение. каждая строка это лишь демонстрация возможности новых методов. да и Id и Name надо заменять на свои.
 
Будет в 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
 
Последнее редактирование:
Будет в 7.3.0.0.

Оставлю тут:
C#:
Развернуть Свернуть Копировать
int threadsZP = ZennoPoster.GetThreadsCount();
int currentTaskThreadsById = ZennoPoster.GetThreadsCount(Id);
int currentTaskThreadsByName = ZennoPoster.GetThreadsCount(Name);
Работает ли? Стопицот тем перечитал об одном и том же, и рабочих решений чет как-то никаких ((( Трудно быть нубом...
 
Работает ли? Стопицот тем перечитал об одном и том же, и рабочих решений чет как-то никаких ((( Трудно быть нубом...

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 не работает.
 
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 - отдельная программа.
 
А как узнать сколько выставлено максимальное количество потоков, а не сколько именно в настоящий момент выполняется?
И как изменить это значение?

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

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

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

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