@anarbus в глобальной переменной укажите время окончания работы, и пусть каждый поток периодически проверяет, не вышло ли это время, если вышло - завершить работу. А в асинхронной функции можно установить жесткий останов скрипта, если время превышено вдвое, например. Хотя, если всё отлажено, то асинхронка и не нужна.
Подскажите как выбрать сервер и какае характеристики чтоб при запуске скрипта сам скрипт делал 500 лайков за 15 минут?
Также, как и выбирать сервер для чего угодно. Берешь пачку VDS по очереди с почасовой оплатой, запускаешь скрипт в нужное кол-во потоков, смотришь результат, увеличиваешь конфигурацию VDS, пока скорость и производительность не устроит.
Когда устроит, берешь железный сервер со схожими параметрами.