我需要一个函数,该函数在可调用函数需要很长时间才能完成其任务后会引发可捕获的异常。
注意:我不是指 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) {
// ....
}