【发布时间】:2013-02-04 21:42:16
【问题描述】:
我想将 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,可以看一下timeout parameter。
-
假设
max_execution_time已经设置为∞ -
也许可以尝试(如果不使用 curl)将使用异步处理系统,如 gearman,根据 SO,它们可以在处理过程中中途停止:stackoverflow.com/questions/2270323/…
标签: php