timeout — ограничить время выполнения вызываемого в Stack Overflow

Мне нужна функция, которая будет генерировать ловимое исключение после того, как вызываемая функция заняла много времени, чтобы выполнить свою задачу.

Примечание: я не имею в виду максимальное время выполнения скрипта PHP.

Функция должна работать как call_user_func за исключением того, что для вызова требуется время в секундах.

    function task() {
// does a lot of work...
}

try {
call_user_func('task', 30); // limit to 30 seconds
} catch (TimeoutException $ex) {
// ....
}

Я не могу добавить пользовательскую логику в task функция, чтобы бросить исключение самостоятельно. Идея состоит в том, чтобы сила вызываемые методы для прерывания или сбоя через X секунд.

У меня есть сценарии CLI, которые я хочу регулировать, сколько времени они занимают, чтобы выполнить задачу.

0

Решение

Вы можете использовать EvTimer. Однако вы должны установить пакет Ev, поскольку он не является частью PHP. Вы можете сделать это с pecl установить ev

    <?php

function task(){
// DOES A LOT OF WORK...
}

function runTaskWithin($seconds) {
// SET UP A TIMER TO FIRE AFTER X-SECONDS
$evT = new EvTimer($seconds, 0, function ($seconds) {
throw(new Exception("{$seconds} Seconds has elapsed since Execution began... Better rest, Now."));
});
}

// ONCE 30 SECONDS PASSES A NEW EXCEPTION WILL BE THROWN...
// NON-BLOCKING...
try {
runTaskWithin(30); //  LIMIT TO 30 SECONDS
} catch (Exception $ex) {
// ....
}
0

Другие решения

Других решений пока нет …