Многопоточность, зацикливание

JanCarlo

Client
Регистрация
04.03.2018
Сообщения
358
Благодарностей
40
Баллы
28
Ребят, сталкиваюсь с проблемой и никак не пойму принцип работы многопотока, возможно кто подскажет статейку про многопоточность и зацикливание и работа со списками. Видео от ростоникса смотрел, вроде все понятно а в работе неясности.

Написал 2 шаблона. Первый в Однопотоке бегает по страницам доски объявлений и собирает ссылки на объявы и записывает их в текстовик.
Строк бывает 10к-50к.
Второй шаблон парсит уже данные с каждой ссылки, я сделал зацикливание, то есть шаблон взял из текстовика ссылку, собрал данные, удалил строку из текстовика, взял следующую - собрал - удалил строку. То есть в самом шаблоне зацикливание до тех пор пока строки не кончатся. Теперь вопрос по многопотоку. (ПС: шаблон на гетах без браузера, потоков много тянет)

При запуске шаблона в Зенке, ставлю количество потоков 300, количество выполнений 300, в настройках стоит "количество потоков в одном процессе 5" и вот тут не понятно что от чего зависит.

В результате некоторые задания отрабатываются нормально с обработкой всех ссылок, но бывает так что во время работы отваливается скажем 30 потоков и работают всего 270 - а по окончанию работы шаблона в текстовике остается к примеру из 50к ссылок - 4к. То есть Проект закончился а еще 4к ссылок осталось. Приходится шаблон перезапускать с такими же настройками и он уже дорабатывает до конца нормально.


Расскажите пожалуйста про настройки многопоточности в самой зенке, может быть мне нужно НЕ закцикливать шаблон? Тогда сколько раз нужно выполнять проект что бы обработать скажем 50к ссылок?

Оперативы 16гб пока что, проц intel xeon v4 e5 2630 10 ядер (скоро будет докуплено еще оперативы и еще такой же процессор)

В голове уже каша с этими многопотоками, количеством выполнений, реализацией самого шаблона и про количество потоков в одном процессе.

Заранее спасибо
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
в настройках стоит "количество потоков в одном процессе 5" и вот тут не понятно что от чего зависит.
Это работает только на веб версии. Сделано для "Экономии" ресурсов. Если с ресурсами все в порядке, то практика показала, что лучше ставить 1.

В результате некоторые задания отрабатываются нормально с обработкой всех ссылок, но бывает так что во время работы отваливается скажем 30 потоков и работают всего 270 - а по окончанию работы шаблона в текстовике остается к примеру из 50к ссылок - 4к. То есть Проект закончился а еще 4к ссылок осталось. Приходится шаблон перезапускать с такими же настройками и он уже дорабатывает до конца нормально.
Надо вести список ошибок. Куда будут записываться ID ошибки, дата, время и остальные нужные данные для анализа.

После BAD END выполните этот код, а результат запишите в список.
Код:
var error = project.GetLastError();
return error.ActionId;
Для многопотока нужно:
Брать из списка строку с удалением.
Лочить запись в список.

Если работа с запросами:
Необходимо проверять на пустой ответ.
Желательно в начале проверять на распространенные ошибки (503, 407 и т.д.) и баны прокси.
 
  • Спасибо
Реакции: JanCarlo

JanCarlo

Client
Регистрация
04.03.2018
Сообщения
358
Благодарностей
40
Баллы
28
Это работает только на веб версии. Сделано для "Экономии" ресурсов. Если с ресурсами все в порядке, то практика показала, что лучше ставить 1.


Надо вести список ошибок. Куда будут записываться ID ошибки, дата, время и остальные нужные данные для анализа.

После BAD END выполните этот код, а результат запишите в список.
Код:
var error = project.GetLastError();
return error.ActionId;
Для многопотока нужно:
Брать из списка строку с удалением.
Лочить запись в список.

Если работа с запросами:
Необходимо проверять на пустой ответ.
Желательно в начале проверять на распространенные ошибки (503, 407 и т.д.) и баны прокси.
спасибо за ответ!

по логике так и делаю, только что значит лочить запись в список?
проверку на пустой ответ делаю (в зависимости от того какой сайт и что там вылетает)


а как составить код на шарпе что бы писался подробный лог для ошибок?
 

Чешир

Client
Регистрация
27.06.2014
Сообщения
1 634
Благодарностей
963
Баллы
113
отрабатывай пока есть строки в списке. Как строки закончатся, шаб должен выходить по ошибке. Настрой остановку шаба после нескольких ошибок подряд
Так и не понял, зачем тебе в 300 потоков запускать.
У тебя в настройках шаба браузер отключен?
а как составить код на шарпе что бы писался подробный лог для ошибок?
да вроде это и кубиками можно.
сохраняй в отдельный файл при ошибке урл, код страницы, обычно этого достаточно
 
  • Спасибо
Реакции: JanCarlo

Чешир

Client
Регистрация
27.06.2014
Сообщения
1 634
Благодарностей
963
Баллы
113
При запуске шаблона в Зенке, ставлю количество потоков 300, количество выполнений 300
по второму шабу.
поставил бы ты, например, 10 потоков, выполнения -1, условия остановки - 5 ошибок подряд.
и работал бы шаб, пока не кончатся строчки в списке.
В случае ошибки можно строку записывать в другой файл и повторно по нему запускать. Часто бывате что сайт какой-то недоступе, а при повторном заходе он работает.
Я бы так сделал.
И запускал бы я его после отработки первого шаба.
А во сколько потоков у тебя первый шаб работает?
 
  • Спасибо
Реакции: JanCarlo

JanCarlo

Client
Регистрация
04.03.2018
Сообщения
358
Благодарностей
40
Баллы
28
отрабатывай пока есть строки в списке. Как строки закончатся, шаб должен выходить по ошибке. Настрой остановку шаба после нескольких ошибок подряд
Так и не понял, зачем тебе в 300 потоков запускать.
У тебя в настройках шаба браузер отключен?

да вроде это и кубиками можно.
сохраняй в отдельный файл при ошибке урл, код страницы, обычно этого достаточно
Спасибо за советы!

В настройках шаба браузер отключен. Попробую сделать как ты посоветовал, буду пилить отлов ошибок
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
только что значит лочить запись в список?
Это значит во время записи данных в список, он блокируется и временно не доступен для других потоков. Это делается на C#.
Если запись идет часто и в многопотоке, то лучше лочить запись. Если не часто, то можно обойтись без этого.

а как составить код на шарпе что бы писался подробный лог для ошибок?
Тот код который я кинул, он записывает ID кубика, на котором была ошибка. Потом через поиск можно найти этот куб и подумать как исправить ошибку, в вебе я делаю скрины страницы и различные переменные записываю в лог, что бы воссоздать в голове ситуацию по которой произошла ошибка. Не всегда получается, но это лучше чем не иметь вобще никакой информации по ошибке.
 
  • Спасибо
Реакции: JanCarlo

Чешир

Client
Регистрация
27.06.2014
Сообщения
1 634
Благодарностей
963
Баллы
113
Это значит во время записи данных в список, он блокируется и временно не доступен для других потоков. Это делается на C#.
а это разве не происходит автоматически без сишарпа?
 

Mikhail B.

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

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
Потоки из за ошибок отваливаются. нужно проверять ответ на наличие элемента или текста который всегда есть на странице.
Если нет нужного маркера, то, или плохая-забаненая прокся и ссылку назад в список кладем, или проверить на маркер несуществующей страницы и не возвращать ссылку в список.
 
  • Спасибо
Реакции: JanCarlo

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 116
Баллы
113

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