[Сделано]Вопрос по работе с потоками
-
Как программно отключить поток?
Как программно включить поток?Можете написать пример использования?
Насколько я понимаю действие завершить поток просто закрывает текущий поток и не дает ему перезапускаться?Необходимо спросить у веб сервера, сколько необходимо потоков для задач определенного кол-ва ботов на момент запуска скрипта.
Пока это возможно только редактируя код скрипта. Создав еще одну секцию, в которой совершать запрос к серверу и устанавливать результат в глобальную переменную.
Но в конструкторе это работать не будетКогда наступает ситуация что работают 30 потоков и 20 штук в ожидании, не очень хорошо сказывается на производительности, было бы замечательно вырубить эти 20, и по необходимости подключать.
Основной удар по производительности в этом случае идет из-за браузера. Возможно действие закрыть браузер/откріть браузер решит проблему?
-
@support хм... закрывать браузер, а это отличная идея. Потоки без браузера действительно меньше требуют ресурсов железа. Спасибо.
@support said in Вопрос по работе с потоками:
Можете написать пример использования?
По поводу примера использования вкл/выкл потока.
Например: в базе на данный моммент есть задания для 20 потоков, запуская скрипт у нас по умолчанию запускается 30 потоков, каждый поток берет себе по 1 заданию и работает с ним, те кому не досталось находяться в ожидании и было бы круто для них вызвать что, то типо thread_close('лог: Мало заданий, поток завершен')!В ситуации же, если есть 100 заданий, а запущено по дефолту 30 потоков. Как только последний поток берет себе 30-ое задание, можно проверить что это последний поток и что есть еще задания, и потоков не хватает - добавить в работу еще 20 или все 70 потоков(в зависимости от мощности железа).Запускаясь каждый новый поток будет брать себе по заданию и т.д и т.п
Идея в том, что бы динамически регулировать кол-во потоков по нуждам скрипта. Надо больше потоков? будет. Слишком много? Можно и уменьшить
-
@UlybnisJe Предлагаю такой вариант решения проблемы:
Сразу создаем макс количество потоков, но без браузера(эту возможность я обеспечу).
В цикле берем разные задания и выполняем.
Если за определенное количество раз задание получить не удалось(мало заданий в базе) - удаляем браузер до лучших времен.
Если задания в базе снова появились - создаем браузер снова.
Как вам?
-
@support для начала, это отличное решение, его так и собирался реализовать.
Но, не нашел способа закрыть браузер... Вижу только сброс, но это же не оно.
-
@support said in Вопрос по работе с потоками:
разу создаем макс количество потоков, но без браузера(эту возможность я обеспечу).
Я так понял это просто удалить 1 строку из initialize?
section_start("Initialize", 0)!
-> ЭТУ browser()!
section_end()!
-
@UlybnisJe Если это удалить, оно пересоздастся потом. Я планирую в чт-пт выпустть патч с некоторыми улучшениями. Там добавлю ручное управление браузером.
-
@support а реально ли вообще сделать такую штуку как настоящий браузер? Я имею ввиду, что запускаешь скрипт, он допустим авторизовывается и дает управление в твои руки, и ты пользуешься браузером как обычным хромом.
В некоторых ситуациях это было бы очень даже кстати.
-
@UlybnisJe Да, можно, но пока не реализовано. Возможно потом сделаю переключение на ручное управление.
-
Переключение на ручное управление помогло бы вот с этим http://prnt.sc/cwnwsp
-
@Ficus С этим видом капчи будет работать отдельный модуль.
-
@UlybnisJe В новой версии доступны 2 новых действия Открыть браузер и Закрыть браузер. Если хотя бы одно из них использовано - это значит, что разработчик управляет жизнью браузера самостоятельно. Перед загрузкой любой страницы браузер нужно открыть, тогда, когда нужно сохранить память его можно закрыть.
-
@support Гениально)
-
@support Я так и не понял как работает ручное управление. Пробовал и так и сяк.
-
Для тех, кто будет искать http://community.bablosoft.com/post/3210