- Регистрация
- 10.12.2018
- Сообщения
- 1 022
- Благодарностей
- 1 424
- Баллы
- 113
Настройка многозадачности в рамках одного потока.
В этот раз поговорим о многопоточности/многозадачности внутри одного потока зеннопостера.
Тема должна понравиться обладателям лайт/стандарт лицензий, зеннобоксов и тем, кто хочет запускать шаблон многопоточно в проджект-мейкере. Ну, может еще кому-то, кто начинает грызть C# или просто прохожему.
Я иногда использую похожий подход в написании шаблонов, где это действительно имеет смысл потому, что это очень удобно в последующем использовании, если все тщательно продумать, и действительно способно в некоторых случаях сэкономить массу ресурсов.
Ничего сложного и секретного здесь нет. Простейший пример и простейшее исполнение на самом деле.
Я не стал делать рерайт документации и статей на блогах по используемым методам, а решил собрать то, что можно пощупать, как говорится.
Для того, чтобы это все работало, нужно повторить настройки потоков зенки для шаблона, а именно, количество выполнений и максимальное количество потоков.
Первое реализовано при помощи класса Thread Thread а второе при помощи класса Semaphore.
Шаблон выполнен в простом варианте, чтобы было доступнее для понимания, как это вообще организовано
Объявляем класс Program, в его конструкторе назначаем все необходимые переменные для работы, для этого передаем ему текущий project и instance.
Нам понадобится профиль, случайная выборка сайтов из общего списка ну и остальные переменные, которые тянутся из входных настроек, такие как число потоков, число сайтов, списки.
Последней строкой вызывается метод Run(). Это основной обычный поток шаблона. Его цель запустить дочерние потоки и дождаться их завершения.
В данном примере под каждый сайт из случайной выборки создается и стартует отдельный поток Thread, котрый будет исполнять метод Worker().
Каждому потоку назначено уникальное имя хоста, Url которого ему предстоит посетить. Все потоки складываются в список и далее основной поток просто в цикле проверяет состояние дочерних. Также, он проверяет принудительную остановку по кнопке "Прервать" и в этом случае принудительно завершает запущенные потоки. В конце сохраняется профиль.
В полученной конструкции в методе Worker() содержится вся логика для работы каждого отдельного потока в своей вкладке.
Одновременная работа потоков регулируется при помощи Semaphore, который пропускает к одновременному выполнению лишь ограниченное число потоков.
А дальше тут все предельно просто. Да, можно вести всю ту же работу, к которой вы все привыкли одновременно в нескольких вкладках.
По имени потока открывается новая вкладка с этим же именем, по хосту отлавливается Url из случайной выборки, ожидание загрузки страницы и рандомное время пребывания выполненного в виде самой примитивной паузы. Ну и оповещение в лог.
Прикрепляю список сайтов, который у меня завалялся от какого-то древнего заказа по парсингу dmoz.
Вот так вот просто это на самом деле устроено. 50 строк кода и немножко логики.
А теперь давайте попробуем позапускать и посмотреть, что же из этого получилось
Нагуливание профилей (кук) с настройками многозадачности.
Ускоренный простой нагуливатель кук. Идея заключается в том, чтобы запустить посещение списка сайтов одновременно в разных вкладках одного инстанса, что непременно должно снизить нагрузку на железо для столь простого, но весьма прожорливого процесса, как нагул кук.
Шаблон выбирает из папки Profiles профиль, у которого замечена самая ранняя последняя активность, это организовано при помощи сортировки по FileInfo.LastAccessTime.
Поэтому перед запуском папка Profiles уже должна быть создана и содержать в себе профили в формате .zpprofile
В настройках все достаточно просто и понятно.
Я не делал муторные проверки на некорректность заполнения настроек. Это усложнило бы только читабельность кода. Поэтому будьте внимательны: Настройки есть, значит их надо заполнить.
В списке прокси должны быть прокси, в списке сайтов список url сайтов без дублей по хостам. Одновременных 100 потоков лучше не ставить.
Жмем старт, +1 и смотрим, как идет работа.
Минимальная версия для запуска шаблона 7.2.0.0
В этот раз поговорим о многопоточности/многозадачности внутри одного потока зеннопостера.
Тема должна понравиться обладателям лайт/стандарт лицензий, зеннобоксов и тем, кто хочет запускать шаблон многопоточно в проджект-мейкере. Ну, может еще кому-то, кто начинает грызть C# или просто прохожему.
Я иногда использую похожий подход в написании шаблонов, где это действительно имеет смысл потому, что это очень удобно в последующем использовании, если все тщательно продумать, и действительно способно в некоторых случаях сэкономить массу ресурсов.
Ничего сложного и секретного здесь нет. Простейший пример и простейшее исполнение на самом деле.
Я не стал делать рерайт документации и статей на блогах по используемым методам, а решил собрать то, что можно пощупать, как говорится.
Для того, чтобы это все работало, нужно повторить настройки потоков зенки для шаблона, а именно, количество выполнений и максимальное количество потоков.
Первое реализовано при помощи класса Thread Thread а второе при помощи класса Semaphore.
Шаблон выполнен в простом варианте, чтобы было доступнее для понимания, как это вообще организовано
Объявляем класс Program, в его конструкторе назначаем все необходимые переменные для работы, для этого передаем ему текущий project и instance.
Нам понадобится профиль, случайная выборка сайтов из общего списка ну и остальные переменные, которые тянутся из входных настроек, такие как число потоков, число сайтов, списки.
Последней строкой вызывается метод Run(). Это основной обычный поток шаблона. Его цель запустить дочерние потоки и дождаться их завершения.
В данном примере под каждый сайт из случайной выборки создается и стартует отдельный поток Thread, котрый будет исполнять метод Worker().
Каждому потоку назначено уникальное имя хоста, Url которого ему предстоит посетить. Все потоки складываются в список и далее основной поток просто в цикле проверяет состояние дочерних. Также, он проверяет принудительную остановку по кнопке "Прервать" и в этом случае принудительно завершает запущенные потоки. В конце сохраняется профиль.
В полученной конструкции в методе Worker() содержится вся логика для работы каждого отдельного потока в своей вкладке.
Одновременная работа потоков регулируется при помощи Semaphore, который пропускает к одновременному выполнению лишь ограниченное число потоков.
А дальше тут все предельно просто. Да, можно вести всю ту же работу, к которой вы все привыкли одновременно в нескольких вкладках.
По имени потока открывается новая вкладка с этим же именем, по хосту отлавливается Url из случайной выборки, ожидание загрузки страницы и рандомное время пребывания выполненного в виде самой примитивной паузы. Ну и оповещение в лог.
Прикрепляю список сайтов, который у меня завалялся от какого-то древнего заказа по парсингу dmoz.
Вот так вот просто это на самом деле устроено. 50 строк кода и немножко логики.
А теперь давайте попробуем позапускать и посмотреть, что же из этого получилось
Нагуливание профилей (кук) с настройками многозадачности.
Ускоренный простой нагуливатель кук. Идея заключается в том, чтобы запустить посещение списка сайтов одновременно в разных вкладках одного инстанса, что непременно должно снизить нагрузку на железо для столь простого, но весьма прожорливого процесса, как нагул кук.
Шаблон выбирает из папки Profiles профиль, у которого замечена самая ранняя последняя активность, это организовано при помощи сортировки по FileInfo.LastAccessTime.
Поэтому перед запуском папка Profiles уже должна быть создана и содержать в себе профили в формате .zpprofile
В настройках все достаточно просто и понятно.
Я не делал муторные проверки на некорректность заполнения настроек. Это усложнило бы только читабельность кода. Поэтому будьте внимательны: Настройки есть, значит их надо заполнить.
В списке прокси должны быть прокси, в списке сайтов список url сайтов без дублей по хостам. Одновременных 100 потоков лучше не ставить.
Жмем старт, +1 и смотрим, как идет работа.
Минимальная версия для запуска шаблона 7.2.0.0
- Номер конкурса шаблонов
- Десятый конкурс шаблонов
Вложения
-
38,4 КБ Просмотры: 854
-
1,4 МБ Просмотры: 629
-
11,5 КБ Просмотры: 510
Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование модератором: