[Сделано]Вопрос по работе с потоками



  • Я подключил внешнюю бд к моим "Ботам" и столкнулся с одним не красивым моментом.

    Есть 5 серверов с БАС на windows. На каждом сервере работает 50 потоков для 50 ботов. Однако бот работает не 24 часа, у каждого бота свои задания, у некоторых на 30 минут, у некоторых на 18 часов, а 50 потоков уже запущены, и отключить не нужные или наоборот на каком то сервере включить необходимые возможности не вижу.

    Как программно отключить поток?
    Как программно включить поток?
    (не обязательно) Как задать динамическую переменную (не из ресурсов) для установления кол-ва потоков скрипта? Необходимо спросить у веб сервера, сколько необходимо потоков для задач определенного кол-ва ботов на момент запуска скрипта.

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



  • Нашел парочку вариантов, но пока что мало опыта с БАС и немного стремно лезть в исходный код скрипта.
    Тут можно менять кол-во потоков, вот только у меня смутные сомнения лезть туда.
    0_1476810751649_ууUntitled picture.png



  • @UlybnisJe

    Как программно отключить поток?
    Как программно включить поток?

    Можете написать пример использования?
    Насколько я понимаю действие завершить поток просто закрывает текущий поток и не дает ему перезапускаться?

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

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

    @UlybnisJe

    Когда наступает ситуация что работают 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


Log in to reply
 

  • 2
  • 21
  • 15
  • 2
  • 3
  • 2
  • 3
  • 3