Вызвать ошибку, как?

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
Привет. У меня такая ситуация получилась, нужно вызвать типа ошибку, или как то может по другому сделать.
Не знаю как сделать, шаблон работает на 20 потоках, через прокси, как проксей остается 50 штук или меньше, он идет на сайт парсить прокси, но чтобы сайт с проксями не долбить в 20 потоков и не парсить дубли проксей, я сначала создавал файл, потом как прокси спарсил этот файл удалял и поток заканчивал, другие потоки проверяли этот файл, если файл есть, поток отрабатывал как успешный. Потом оказалось, что я не вижу точное количество успешных выполнений.
Сделал выход по ошибки, кубиком if посмотрел на нагрузку, думаю что, и за ошибки нагрузка, нагрузка больше чем браузерный парсинг в 20 потоков.
Подумал немного, решил попробовать, не создавать и удалять файл, а заносить туда запись, занес запись, прокси спарсил и потом удалил.

Браузерный шаблон одним потоком парсит прокси, другие потоки работают в холостую и большая нагрузка, как сделать?
1613334173851.png1613333867330.png
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
Максимальная нагрузка достигается за счет большого количества одновременных компиляций проекта, а когда они работают вхолостую, они реально стоят в очереди на запуск постоянно. Чтобы не переделывать все с 0 посоветую сделать отдельный простой шаблон, который будет регулировать запуски потоков основного.
Запускает первый поток, дает ему пропарсить прокси, проверяет, что он там напарсил и исходя из расчетов запускает необходимое число потоков с какой-то минимальной задержкой между стартом.
 
  • Спасибо
Реакции: Roman48

Roman48

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

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
Два шаблона в ЗП будет? Из одного ни как?
А чтобы сделать из одного, обычно нужно перекраивать всю его логику. Если шаблон изначально костыльный, то дальше он лечится новыми костылями. А в чем, собственно, проблема? Почему так критичен еще один шаблон? Раскидываешь шаблоны по меткам и порядок.
 

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
А чтобы сделать из одного, обычно нужно перекраивать всю его логику. Если шаблон изначально костыльный, то дальше он лечится новыми костылями. А в чем, собственно, проблема? Почему так критичен еще один шаблон? Раскидываешь шаблоны по меткам и порядок.
Не хотелось бы, по мне лучше завтра все сначала переделать, и всю логику. У меня и так много разных шаблонов, в них уже путаться стал.
Просто ссылку, как это сделать?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Не надо удалять файл со скаченными проксями. Лучше записать его в отдельную папку типа Темп, так не надо делать лишних телодвижений. Логика простая, идем в Лок , там опрашивает количество прокси , если меньше, парсим и записываем в файл. Это все надо делать в локе, то есть в коде с#. Если парсинг сделан на кубах, то я бы в этот файл записал бы в файле метку в формате busy:timestamp , и проверял бы эту метку так же как количество проксей . а временная метка нужна на всякий пожарный, если например шаблон начавший парсинг, внезапно сдохнет. Тогда если метка старше 20ти минут, к примеру, ее можно удалить.
 
  • Спасибо
Реакции: Roman48

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
Если парсинг сделан на кубах, то я бы в этот файл записал бы в файле метку в формате busy:timestamp , и проверял бы эту метку так же как количество проксей . а временная метка нужна на всякий пожарный, если например шаблон начавший парсинг, внезапно сдохнет. Тогда если метка старше 20ти минут,
По подробнее можешь, или простой пример?
Формат файла busy:timestamp ?
 

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
Вторые сутки не сплю, то сайт обновление, то шаблон, всех услышал, завтра буду переваривать, на свежею голову.
Готов еще варианты и примеры увидеть, услышать.
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
можно и так - еще лучше:
первый поток из 20, который обнаружит, что в файле меньше 50 проксей должен сделать так:
ZennoPoster.StopTask(Guid.Parse(project.TaskId));
Остальные потоки перестанут запускаться и соответственно не уйдут парсить прокси.
Далее этот единственный поток парсит прокси любым способом(кубики, кодом - плевать)
и по окончании парсинга запускает шаблон в работу
ZennoPoster.StartTask(Guid.Parse(project.TaskId));

Я бы еще заморочился и снизил нагрузку при запуске, получив кол-во установленных максимальных потоков и запуская по одному в цикле с паузой в пару секунд.
Как получить это число, легко найти на форуме - сотни примеров есть одного и того же.
А дальше с этим числом поступаешь так:
C#:
Guid id = Guid.Parse(project.TaskId);
ZennoPoster.SetTries(id, 1);//обнулим количество выполнений
ZennoPoster.StartTask(id);//запустим шаблон
int max = 20;//это через TasksList - мне сейчас лень повторяться в который раз. Найдешь сам
int maxplus = 1;//счетчик для добавления потоков
ZennoPoster.SetMaxThreads(id, 2);//Создадим место для запасного потока
do{/*поочередно запускаем по одному потоку с паузой 5 сек*/
    ZennoPoster.AddTries(id, 1);
    ZennoPoster.SetMaxThreads(id, maxplus++);
    Thread.Sleep(5000);
}while(maxplus < max);//пока не наберем установленное ранее количество потоков
ZennoPoster.SetTries(id, -1);//установим количество выполнений.
 

Katya

Client
Регистрация
01.10.2018
Сообщения
28
Благодарностей
16
Баллы
8
можно и так - еще лучше:
первый поток из 20, который обнаружит, что в файле меньше 50 проксей должен сделать так:
ZennoPoster.StopTask(Guid.Parse(project.TaskId));
Остальные потоки перестанут запускаться и соответственно не уйдут парсить прокси.
Далее этот единственный поток парсит прокси любым способом(кубики, кодом - плевать)
и по окончании парсинга запускает шаблон в работу
ZennoPoster.StartTask(Guid.Parse(project.TaskId));

Я бы еще заморочился и снизил нагрузку при запуске, получив кол-во установленных максимальных потоков и запуская по одному в цикле с паузой в пару секунд.
Как получить это число, легко найти на форуме - сотни примеров есть одного и того же.
А дальше с этим числом поступаешь так:
C#:
Guid id = Guid.Parse(project.TaskId);
ZennoPoster.SetTries(id, 1);//обнулим количество выполнений
ZennoPoster.StartTask(id);//запустим шаблон
int max = 20;//это через TasksList - мне сейчас лень повторяться в который раз. Найдешь сам
int maxplus = 1;//счетчик для добавления потоков
ZennoPoster.SetMaxThreads(id, 2);//Создадим место для запасного потока
do{/*поочередно запускаем по одному потоку с паузой 5 сек*/
    ZennoPoster.AddTries(id, 1);
    ZennoPoster.SetMaxThreads(id, maxplus++);
    Thread.Sleep(5000);
}while(maxplus < max);//пока не наберем установленное ранее количество потоков
ZennoPoster.SetTries(id, -1);//установим количество выполнений.
Можете подсказать как добавить еще 1 выполнение шаблона? Просто 1 дополнительное выполнение при Bad End надо сделать
 

Katya

Client
Регистрация
01.10.2018
Сообщения
28
Благодарностей
16
Баллы
8

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