我需要在一段时间内睡觉。
API限制为每分钟300个请求。
答案 0 :(得分:1)
Sleep()不是限制使用速率限制api的可靠方法(无论如何你应该使用usleep())。我认为你正在调用一个限制为每分钟300个请求的外部API?此外,速率限制的一点是您不会使API过载。在前10秒内拨打300次会使得速率限制失败,很可能会使您的系统被禁止。
在这种情况下,您应该每200毫秒(60秒/ 300)最多调用一次API
我会使用类似的东西(感谢@Codler代表你的答案中的代码)
$time1 = microtime(true);
while(true) {
callTheAPI();
$time2 = microtime(true);
if (($time2 - $time1) * 1000 >= 200) {
$time1 = $time2;
} else {
// usleep to make up for the 200 miliseconds
$sleep = ($time2 - $time1) * 1000;
usleep($sleep);
$time1 = microtime(true);
}
}
答案 1 :(得分:0)
while(myCondition)
{
// request code
$sleepTime = 5; /*time in seconds, find its optimum value so that you can use the API to its maximum */
sleep($sleepTime);
}
答案 2 :(得分:0)
$time = microtime(true);
$i = 0;
while(true) {
doSomething();
$i++;
if ($i >= 300) {
$i = 0;
// if it hasn't reached 60 seconds yet, sleep.
$sleep = microtime(true) - $time;
if ($sleep < 60) {
sleep(60 - $sleep);
}
$time = microtime(true);
}
}
?>