У меня был очень похожий опыт, но я остановился на другом решении.
Я тоже тестировал скрипт на 8 ядерном 32 гб дедике с широким каналом и там еле еле 10 потоков шло.
Работающими решением оказалось взять 32 ядерный локальный сервер с 64 оперативки, на не очень быстром канале, с сокс5, на нем 100+ потоков запускалось.
Скрипт тот же, никаких оптимизаций не делалось.
Стоит конечно побольше, чем аренда дедика но тут уж зависит от окупаемости твоей темы, стоит ли оно того или нет.
Но соксы могут быть узким местом, по возможности нужно делать свои соксы. Для этого, можно брать дешевые VPS и установить сокс через опенсурсный софт microsocks для линукса (в инете полно инструкций по установке, занимает не более 5 минут вручную, и можно установку через БАС автоматизировать также на случай если нужны сотни соксов).
Завершить выполнение скрипта через 10 минут
-
Суть такая у меня скрипт выполняется N1 секунд + смотрит видео N2 cекунд , если во время просмотра видео
N1+N2==600 сек надо чтобы заново перезапускался поток.
Я знаю как после выполнения действия(просмотр видео/спит) сделать прирывание,а как во время выполнения действия хз... -
@assd Не понимаю в чём проблема
Я знаю как после выполнения действия(просмотр видео/спит) сделать прирывание
Засекаешь время в начале работы скрипта, а дальше в цикле проверяешь, если 10 минут прошло, то прерываешь, если не прошло, то спать пару секунд.
-
@denis_krsk said in Завершить выполнение скрипта через 10 минут:
@assd Хм. А чем не устраивает действие сон?
Ему вроде как надо завершить работу потока после определённого времени, учитывать надо и загрузку страницы и выполнение скрипта
-
@denis_krsk У меня спит он рандомно от 60% до 100% длительности видео это часто больше 600сек
Трудность в том что некоторые видео не 600 сек. же
И получается мне надо вычислить рандомное время и как бы его спать по 2 сек и проверять не прошло ли больше 600 сек. -
@assd Ну проверку времение можно примерно так делать:
- Экшеном бас или js [[DATE_START]]=Date.now() перед началом цикла запоминаешь в переменную текущее время.
- Запускаешь цикл while с условием Date.now()-[[DATE_START]]<[[BREAK_TIME_SEC]]
- В теле цикла ставишь действие сон, минимум 1000ms
Вообщем примерно так если через выполнить код:
[[BREAK_TIME_SEC]]=400*1000; //Сколько сек смотрим видео в ms
[[DATE_START]]=Date.now(); //Время начала цикла
_do(function(){
if(Date.now()-[[DATE_START]]>[[BREAK_TIME_SEC]]) _break();
sleep(1000)!;
})!