加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

PHP – 停止并捕获花费太长时间的代码

发布时间:2020-05-25 09:05:21 所属栏目:PHP 来源:互联网
导读:我想将 PHP的特定部分限制为X秒 – 如果需要更长时间,则终止当前正在执行的代码(只是部分,而不是整个脚本)并运行备用代码. 伪代码示例(这里的示例用例是一个不稳定的API,有时很快,其他时候是黑洞): $completed = 1;$seconds = 60;while ($completed != -1 $c

我想将 PHP的特定部分限制为X秒 – 如果需要更长时间,则终止当前正在执行的代码(只是部分,而不是整个脚本)并运行备用代码.

伪代码示例(这里的示例用例是一个不稳定的API,有时很快,其他时候是黑洞):

$completed = 1;
$seconds = 60;
while ($completed != -1 && $completed < 5) {
    limit ($seconds) {
        $api = new SomeAPI('user','secret','key');
        $data = $api->getStuff('user="bob"');
        $completed = -1;
    } catch () {
        $completed++;
        sleep(10);
    }
}
if ($completed === 5) echo "Error: API black-hole'd 5 times.n";
else {
    //Notice: data processing is OUTSIDE of the time limit
    foreach ($data as $row) {
          echo $row['name'].': '.$row['message']."n";
    }
}

但是,这应该适用于任何事情.不只是API / HTTP请求.例如.密集的数据库程序.

如果你读得太快:set_time_limit和max_execution_time不是答案,因为它们会影响整个脚本的时间限制,而不仅仅是一个部分(当然,除非我对这些工作的方式有误).

在API调用的情况下,我建议使用cURL,您可以为其设置API调用的特定超时.

对于通用用法,您可以查看分叉过程,这使您能够为每个过程计时并在超过预期时间时将其终止.

当然,如果由于高度重复的循环结构而导致代码段可能需要很长的执行时间,那么您可以提供自己的定时器,以便在指定的时间间隔后退出循环.

我可能没有直接回答你的问题,但我真正希望得到的是,你可能必须使用不同的方法,具体取决于代码块的实际功能.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读