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

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

Roman48

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

Браузерный шаблон одним потоком парсит прокси, другие потоки работают в холостую и большая нагрузка, как сделать?
1613334173851.png1613333867330.png
 
Максимальная нагрузка достигается за счет большого количества одновременных компиляций проекта, а когда они работают вхолостую, они реально стоят в очереди на запуск постоянно. Чтобы не переделывать все с 0 посоветую сделать отдельный простой шаблон, который будет регулировать запуски потоков основного.
Запускает первый поток, дает ему пропарсить прокси, проверяет, что он там напарсил и исходя из расчетов запускает необходимое число потоков с какой-то минимальной задержкой между стартом.
 
  • Спасибо
Реакции: Roman48
Два шаблона в ЗП будет? Из одного ни как?
А чтобы сделать из одного, обычно нужно перекраивать всю его логику. Если шаблон изначально костыльный, то дальше он лечится новыми костылями. А в чем, собственно, проблема? Почему так критичен еще один шаблон? Раскидываешь шаблоны по меткам и порядок.
 
А чтобы сделать из одного, обычно нужно перекраивать всю его логику. Если шаблон изначально костыльный, то дальше он лечится новыми костылями. А в чем, собственно, проблема? Почему так критичен еще один шаблон? Раскидываешь шаблоны по меткам и порядок.
Не хотелось бы, по мне лучше завтра все сначала переделать, и всю логику. У меня и так много разных шаблонов, в них уже путаться стал.
Просто ссылку, как это сделать?
 
Не надо удалять файл со скаченными проксями. Лучше записать его в отдельную папку типа Темп, так не надо делать лишних телодвижений. Логика простая, идем в Лок , там опрашивает количество прокси , если меньше, парсим и записываем в файл. Это все надо делать в локе, то есть в коде с#. Если парсинг сделан на кубах, то я бы в этот файл записал бы в файле метку в формате busy:timestamp , и проверял бы эту метку так же как количество проксей . а временная метка нужна на всякий пожарный, если например шаблон начавший парсинг, внезапно сдохнет. Тогда если метка старше 20ти минут, к примеру, ее можно удалить.
 
  • Спасибо
Реакции: Roman48
Если парсинг сделан на кубах, то я бы в этот файл записал бы в файле метку в формате busy:timestamp , и проверял бы эту метку так же как количество проксей . а временная метка нужна на всякий пожарный, если например шаблон начавший парсинг, внезапно сдохнет. Тогда если метка старше 20ти минут,
По подробнее можешь, или простой пример?
Формат файла busy:timestamp ?
 
Вторые сутки не сплю, то сайт обновление, то шаблон, всех услышал, завтра буду переваривать, на свежею голову.
Готов еще варианты и примеры увидеть, услышать.
 
можно и так - еще лучше:
первый поток из 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);//установим количество выполнений.
 
можно и так - еще лучше:
первый поток из 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 надо сделать
 

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