1 место Шаблон для нагуливания профилей с настройкой многозадачности в рамках одного потока (паралелльные запросы).

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

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Реакции
1 431
Баллы
113
Настройка многозадачности в рамках одного потока.

В этот раз поговорим о многопоточности/многозадачности внутри одного потока зеннопостера.

Тема должна понравиться обладателям лайт/стандарт лицензий, зеннобоксов и тем, кто хочет запускать шаблон многопоточно в проджект-мейкере. Ну, может еще кому-то, кто начинает грызть C# или просто прохожему.

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

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

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

Первое реализовано при помощи класса Thread Thread а второе при помощи класса Semaphore.

Шаблон выполнен в простом варианте, чтобы было доступнее для понимания, как это вообще организовано

Объявляем класс Program, в его конструкторе назначаем все необходимые переменные для работы, для этого передаем ему текущий project и instance.

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

104980



Последней строкой вызывается метод Run(). Это основной обычный поток шаблона. Его цель запустить дочерние потоки и дождаться их завершения.

В данном примере под каждый сайт из случайной выборки создается и стартует отдельный поток Thread, котрый будет исполнять метод Worker().

Каждому потоку назначено уникальное имя хоста, Url которого ему предстоит посетить. Все потоки складываются в список и далее основной поток просто в цикле проверяет состояние дочерних. Также, он проверяет принудительную остановку по кнопке "Прервать" и в этом случае принудительно завершает запущенные потоки. В конце сохраняется профиль.

1679305746178.png

В полученной конструкции в методе Worker() содержится вся логика для работы каждого отдельного потока в своей вкладке.

1679306220674.png

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

А дальше тут все предельно просто. Да, можно вести всю ту же работу, к которой вы все привыкли одновременно в нескольких вкладках.

По имени потока открывается новая вкладка с этим же именем, по хосту отлавливается Url из случайной выборки, ожидание загрузки страницы и рандомное время пребывания выполненного в виде самой примитивной паузы. Ну и оповещение в лог.

Прикрепляю список сайтов, который у меня завалялся от какого-то древнего заказа по парсингу dmoz.

Вот так вот просто это на самом деле устроено. 50 строк кода и немножко логики.

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

Нагуливание профилей (кук) с настройками многозадачности.

Ускоренный простой нагуливатель кук. Идея заключается в том, чтобы запустить посещение списка сайтов одновременно в разных вкладках одного инстанса, что непременно должно снизить нагрузку на железо для столь простого, но весьма прожорливого процесса, как нагул кук.

Шаблон выбирает из папки Profiles профиль, у которого замечена самая ранняя последняя активность, это организовано при помощи сортировки по FileInfo.LastAccessTime.

Поэтому перед запуском папка Profiles уже должна быть создана и содержать в себе профили в формате .zpprofile

В настройках все достаточно просто и понятно.

Я не делал муторные проверки на некорректность заполнения настроек. Это усложнило бы только читабельность кода. Поэтому будьте внимательны: Настройки есть, значит их надо заполнить.
В списке прокси должны быть прокси, в списке сайтов список url сайтов без дублей по хостам. Одновременных 100 потоков лучше не ставить.


1679252265853.png

Жмем старт, +1 и смотрим, как идет работа.

1679253792711.png

Минимальная версия для запуска шаблона 7.2.0.0
 
Номер конкурса шаблонов
  1. Десятый конкурс шаблонов

Вложения

Последнее редактирование модератором:
Пока ихмо ТОП из всех предоставленных, мой голос за Alexmd!
 
  • Спасибо
Реакции: traffman и Alexmd
Интересно посмотреть реализацию многопотока :ay:
 
  • Спасибо
Реакции: Alexmd
помоги пожалюста, я чтото делаю не так и не знаю как исправить так как не разбераюсь в сишарпе
Screenshot_3.jpgScreenshot_4.jpg Screenshot_5.jpg
формат прокси в тхт socks5://log:pass@ip:port
 
  • Спасибо
Реакции: Alexmd
помоги пожалюста, я чтото делаю не так и не знаю как исправить так как не разбераюсь в сишарпе
Посмотреть вложение 104939Посмотреть вложение 104940 Посмотреть вложение 104941
формат прокси в тхт socks5://log:pass@ip:port
@sabir спасибо.
хоть кто-то запустить попробовал. я так и знал, что люди по заголовкам голосуют, а не по шаблонам. 28 скачиваний и Вы первый, кто попытался запустить.
дело в том, что я тестировал без прокси, так как просто лень было искать файл с прокси на компе. впихнул и даже не проверил, как оно отработает - поспешил. а там действительно ошибка компиляции.
Отредактировать не могу пост. так что прикрепляю сюда.
 

Вложения

Добрый день. а есть подобная версия для хромиума?

Или как его с профиль папами запустить в работу?
 
  • Спасибо
Реакции: Alexmd
Добрый день. а есть подобная версия для хромиума?

Или как его с профиль папами запустить в работу?
Сделал и для папок в хромиуме. В текущей реализации, в директории проекта должна быть папка "Профиль-папки" с профиль-папками.

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

1679522507511.png1679522546190.png1679522765350.png

Надеюсь, это действительно кому-то когда-то пригодится. Если уж и гулять профили, то как-то так, я думаю. Ну, всегда думал, но вот так совпало, что и руки дошли.
 

Вложения

Да, отдам голос свой тоже. Нужная вещь и открытая. Пили под себя пока не устанешь.
 
  • Спасибо
Реакции: Alexmd
Надеюсь, это действительно кому-то когда-то пригодится.

Спасибо! Работает с ПП.

Единственное вроде как все инстансы запускаются как декстоп, хотя профили мобильные. Есть возможность как то указать, чтобы использовал встроенные данные?

С общим кодом, к сожалению, вообще не дружу..
 
  • Спасибо
Реакции: lbvf65
Спасибо! Работает с ПП.

Единственное вроде как все инстансы запускаются как декстоп, хотя профили мобильные. Есть возможность как то указать, чтобы использовал встроенные данные?

С общим кодом, к сожалению, вообще не дружу..
Есть возможность как то указать, чтобы использовал встроенные данные?
было бы классно использовать стандартные данные профиля
 
Спасибо! Работает с ПП.

Единственное вроде как все инстансы запускаются как декстоп, хотя профили мобильные. Есть возможность как то указать, чтобы использовал встроенные данные?

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

Может не правильно выразился. Извиняюсь.

Запускаю ваш шаблон.
105101


Запускаю с теми же профиль папками другой шаблон.
105102



Может может кто-то подсказать, почему основной шаблон запускает инстанс не учитывая размеры устройств?
 
А в каком формате проки должны быть? Положил одну в стандартном protocol:user:pass@ip:port и получаю ошибку.
105105

105106
 
А в каком формате проки должны быть? Положил одну в стандартном protocol:user:pass@ip:port и получаю ошибку.

у меня в стандартоном зеновском запускаются и в мейкере и в постере. возможно версию не ту запускаете. в комментах было что-то подобное
 
у меня в стандартоном зеновском запускаются и в мейкере и в постере. возможно версию не ту запускаете. в комментах было что-то подобное
Версия норм, 7.7.3.0
 
Да, пошло, поехало.

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

Это так, комментарий, мысли в слух.

Был бы на экшенах я бы под себя подправил.
 
  • Спасибо
Реакции: pix и искра
  • Спасибо
Реакции: искра
Одному мне показалось что заголовок шаблона и содержимое это 2 разные вещи?
берем 1ый пост и смотрим лог
там 20 сайтов - сайты посещаются поочередно и никаким образом ни параллельно.
Какие там параллельные запросы и посещения?
async await и прочего - просто нет.
А все такие хлопают в ладоши, ой как здорово, ппц, вам кусок кода дали и все бегут голосовать
А за что? за tab.Navigate в обертке?)))
 
Да, пошло, поехало.

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

Это так, комментарий, мысли в слух.

Был бы на экшенах я бы под себя подправил.

На форуме полно примеров + почти каждый кубик конвертируется в код. Если что-то не получается или не находится, можно всегда спросить у коллег на форуме. Благо, тут всегда помогают советами и сниппетами.
Логика работы в каждом потоке выполняется в методе Worker(). Не думаю, что так сложно осилить это и изменить паузу и добавить какое-то необходимое поведение. Каждому не угодишь, вот я и собрал самый минимум. Посещение и задержка.
Если бы моя деятельность была как-то связана с особенностями прокачки профилей и именно это было бы целью этого шаблона, я бы может и написал бы идеальную, но ни разу нерабочую схему нагула в один поток и регистрацию на всех сервисах без смс, а не то, что написал.

Может не правильно выразился. Извиняюсь.

Может может кто-то подсказать, почему основной шаблон запускает инстанс не учитывая размеры устройств?
Кажется, я понял Ваш вопрос. Я с ПП никогда не сталкивался до Вашей просьбы. Мне за глаза хватает и обычных профилей для моих задач.
По идее же, должно подтягиваться все. Я тоже хотел бы знать. Надо у разрабов постера спросить как из кода заставить это работать так, как мы этого ожидаем. Потому что, ну, видимо, недостаточно просто указать папку профиля при запуске инстанса. Но кажется когда-то был ответ, что то, что нам дали в методе Launch() - это все, что может быть доступно из кода.



Одному мне показалось что заголовок шаблона и содержимое это 2 разные вещи?
берем 1ый пост и смотрим лог
там 20 сайтов - сайты посещаются поочередно и никаким образом ни параллельно.
Какие там параллельные запросы и посещения?
async await и прочего - просто нет.
А все такие хлопают в ладоши, ой как здорово, ппц, вам кусок кода дали и все бегут голосовать
А за что? за tab.Navigate в обертке?)))
tab.Navigate действительно выполняется последовательно в каждой вкладке, но так же действительно одновременно в нескольких. К чему здесь async конкретно в этой реализации? Чтобы напугать юзеров и показать, что умеешь использовать это ключевое слово в коде, даже когда это не совсем уместно? Есть люди, которые вообще общего кода, как огня боятся. Но в такой простой реализации им будет проще внести правки в Worker() и изменить поведение профиля на посещаемых сайтах.

Шаблон действительно простой, как 2 копейки и я сам никак не ожидал такой волны одобрения, которая всегда сопровождается такими постами(спасибо, что без оскорблений).
Видимо, нравится людям не элементарный метод в обертке, а сама обертка. Заворачивай в нее что хочешь. У каждого своя секретная методика по нагулу, как я понял.

Это тема о том, что на такое возможно крайне важное мероприятие можно и лучше, наверное, запускать не 10 браузеров, а 1 с 10 вкладками, и совершать необходимые действия в каждой вкладке одновременно.
 
  • Спасибо
Реакции: bados и one
К чему здесь async конкретно в этой реализации
это для примера, просто к слову)
параллельные запросы - это когда 20 сайтов (как в примере) - посетило за 2-5 сек. Все и сразу и быстро.
А тут что? берем список ссылок ходим по ним в цикле в новых вкладках - готово. 1 место) 70% голосов за)))
Дальше есть продолжение...нецензурное, поэтому пожалуй остановлюсь.
 
  • Спасибо
Реакции: zarufakis и Dmitriy Ka

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