У меня был очень похожий опыт, но я остановился на другом решении.
Я тоже тестировал скрипт на 8 ядерном 32 гб дедике с широким каналом и там еле еле 10 потоков шло.
Работающими решением оказалось взять 32 ядерный локальный сервер с 64 оперативки, на не очень быстром канале, с сокс5, на нем 100+ потоков запускалось.
Скрипт тот же, никаких оптимизаций не делалось.
Стоит конечно побольше, чем аренда дедика но тут уж зависит от окупаемости твоей темы, стоит ли оно того или нет.
Но соксы могут быть узким местом, по возможности нужно делать свои соксы. Для этого, можно брать дешевые VPS и установить сокс через опенсурсный софт microsocks для линукса (в инете полно инструкций по установке, занимает не более 5 минут вручную, и можно установку через БАС автоматизировать также на случай если нужны сотни соксов).
запуск мульти потоков по тригеру
-
на всякий случай еще раз свою мысль:
имею возможность запускать, к примеру, 50 потоков
каждые 5 сек проверяю БД на наличие задачи. в задаче может быть 5 выполнений, может быть 500.
пытаюсь реализовать таким образом, чтобы каждые 5 сек стартовали потоки, если есть свободные и выполняли свои задачи.50 потоков
задача1, 50 заданий, стартанули все 50 потоков
спим 5 сек
задача2, 10 заданий, не стартануло нисколько, все потоки заняты
спим 5 сек
задача2, 10 заданий, освободилось 6 потоков, стартануло 6 потоков
спим 5 сек
задача2, осталось 4 задания, освободилось 20 потоков, стартануло 4 потока
спим 5 сек
задача3....... -
@buzzlighter said in запуск мульти потоков по тригеру:
на всякий случай еще раз свою мысль:
имею возможность запускать, к примеру, 50 потоков
каждые 5 сек проверяю БД на наличие задачи. в задаче может быть 5 выполнений, может быть 500.
пытаюсь реализовать таким образом, чтобы каждые 5 сек стартовали потоки, если есть свободные и выполняли свои задачи.50 потоков
задача1, 50 заданий, стартанули все 50 потоков
спим 5 сек
задача2, 10 заданий, не стартануло нисколько, все потоки заняты
спим 5 сек
задача2, 10 заданий, освободилось 6 потоков, стартануло 6 потоков
спим 5 сек
задача2, осталось 4 задания, освободилось 20 потоков, стартануло 4 потока
спим 5 сек
задача3.......тут важный момент, вам нужно ждать завершения потоков с одной задачи, прежде чем они начнут другую задачу? Если да, то используйте "Вызов функции в несколько потоков", если нет, то используйте действие "Вызов функции асинхронно", а данные в функцию передавайте через атрибут функции
-
@Fox said in запуск мульти потоков по тригеру:
@buzzlighter said in запуск мульти потоков по тригеру:
на всякий случай еще раз свою мысль:
имею возможность запускать, к примеру, 50 потоков
каждые 5 сек проверяю БД на наличие задачи. в задаче может быть 5 выполнений, может быть 500.
пытаюсь реализовать таким образом, чтобы каждые 5 сек стартовали потоки, если есть свободные и выполняли свои задачи.50 потоков
задача1, 50 заданий, стартанули все 50 потоков
спим 5 сек
задача2, 10 заданий, не стартануло нисколько, все потоки заняты
спим 5 сек
задача2, 10 заданий, освободилось 6 потоков, стартануло 6 потоков
спим 5 сек
задача2, осталось 4 задания, освободилось 20 потоков, стартануло 4 потока
спим 5 сек
задача3.......тут важный момент, вам нужно ждать завершения потоков с одной задачи, прежде чем они начнут другую задачу? Если да, то используйте "Вызов функции в несколько потоков", если нет, то используйте действие "Вызов функции асинхронно", а данные в функцию передавайте через атрибут функции
ждать не нужно
я так и сделал, асинхронно, как на скрине
но не отрабатывает корректно, не пойму почему
в записи корректно
в запуске функция не вызывается вовсе, for фигачит до бесконечности -
@buzzlighter said in запуск мульти потоков по тригеру:
ждать не нужно
я так и сделал, асинхронно, как на скрине
но не отрабатывает корректно, не пойму почему
в записи корректно
в запуске функция не вызывается вовсе, for фигачит до бесконечностиОбязательно добавьте действие "Сон" в цикл, иначе может зависнуть BAS. Выводите содержимое переменных в лог, так вы увидите причину
-
@Fox said in запуск мульти потоков по тригеру:
@buzzlighter said in запуск мульти потоков по тригеру:
ждать не нужно
я так и сделал, асинхронно, как на скрине
но не отрабатывает корректно, не пойму почему
в записи корректно
в запуске функция не вызывается вовсе, for фигачит до бесконечностиОбязательно добавьте действие "Сон" в цикл, иначе может зависнуть BAS. Выводите содержимое переменных в лог, так вы увидите причину

это всё что на данный момент есть в асинхронной функции
в режиме запуска в лог ничего не падаетв for добавлю sleep
-
@buzzlighter said in запуск мульти потоков по тригеру:
это всё что на данный момент есть в асинхронной функции
в режиме запуска в лог ничего не падаетв for добавлю sleep
На будущее, не присылайте скриншоты кода, в них сложно бывает разобраться. Лучше приложите тестовый скрипт (скрипт, который не содержит лишних действий), вам быстрее смогут помочь
-
сейчас добавил слип
внимательно оттестил на трех потоках [[THREADS]].
в режиме запуска происходит следующееработает цикл, вызывается асинхронная функция, после в цикле слип 1сек. в функции стоит слип 10сек.
наблюдаю картину, что цикл плодит функции, не соблюдая ограничение в 3 одновременных функции одновременно -
ура, я освоил и работает как я ожидал
теперь вопрос
вверху у меня 6,7,8,9,10 инстанс
в логе идет инфа от потоков, которые ну как бы не запущены
это как интерпретировать? -
@buzzlighter said in запуск мульти потоков по тригеру:
вверху у меня 6,7,8,9,10 инстанс
в логе идет инфа от потоков, которые ну как бы не запущены
это как интерпретировать?Потоки могут работать и без браузеров, смотрите логику работы вызова функций
-
@Fox said in запуск мульти потоков по тригеру:
@buzzlighter said in запуск мульти потоков по тригеру:
вверху у меня 6,7,8,9,10 инстанс
в логе идет инфа от потоков, которые ну как бы не запущены
это как интерпретировать?Потоки могут работать и без браузеров, смотрите логику работы вызова функций
у меня сейчас основная логика в onApplicationStart, которая открывает асинхронно браузеры
то бишь количество потоков по идее должно равняться браузерам и соответственно поток в логе по идее должен равняться кнопке Браузер # -
@buzzlighter net, ne doljen, logichno chto doljen sovpadat, no kajdiy raz sozdaetsa noviy potok, poetomy v loge otobrajaetsa noviy #, eto mojno ispravit tolko logikoy, esli silno nujno