Мне нужна функция, которая будет генерировать ловимое исключение после того, как вызываемая функция заняла много времени, чтобы выполнить свою задачу.
Примечание: я не имею в виду максимальное время выполнения скрипта 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, которые я хочу регулировать, сколько времени они занимают, чтобы выполнить задачу.
Вы можете использовать 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) {
// ....
}
Других решений пока нет …