我想将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";
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这应该适用于任何事情.不只是API/HTTP请求.例如密集的数据库程序.
如果你读得太快: set_time_limit和max_execution_time是不是因为它们影响的时限,答案整个脚本,而不仅仅是一个部分(除非我错了,如何这些工作,当然).
对于 API 调用,我建议使用 cURL,您可以为 API 调用设置特定的超时时间。
对于一般用途,您可以查看分叉进程,这将使您能够对每个进程进行计时,并在超过预期时间时将其终止。
当然,如果该代码段由于高度重复的循环结构而可能需要较长的执行时间,您可以提供自己的计时器以在指定的时间间隔后跳出循环。
我可能没有直接回答你的问题,但我真正想要表达的一点是,你可能必须根据代码块的实际用途使用不同的方法。
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |