PHP 延迟执行的问题?

发布于 2022-09-01 06:32:47 字数 805 浏览 17 评论 0

去网上查了,首先是sleep系列(sleep/usleep/nanosleep/time_sleep_until)的函数,首先这些函数有个问题,sleep是当前进程挂起,比如:

echo time();
sleep(10);
echo time();

其实是【等了10秒】之后,【再同时】显示两个时间戳,时间戳之间相差10秒。

而我想要的效果是先显示第一个时间戳,等10秒,再显示第二个时间戳。

于是:

我想要用无限循环,然后判断当前时间与预存时间之间的差值来break出当前的死循环。比如:

for(100遍){
//一些操作
$start = time();
while(true){
if(time() - $start == 1)break;
}
}

意思for循环每执行一次,末尾都会进入死循环,然后隔了1秒跳出死循环,继续下一次for循环。
但是,但是,居然是死循环!!!

后来试了下:

while(true){
echo time();
}

居然不变!!!而 echo 出 date('s') 是变的!!!

所以想问:

1、如果说需要满足延迟执行的需求,不要sleep,不要线程,单纯就是暂停下再执行(其实我是做的爬虫,频率高了会被302),除了上面死循环的方式还有其它方式吗?(不要 AJAX,仅是 PHP 端)

2、为什么那个 time() 不变?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

注定孤独终老 2022-09-08 06:32:47
  1. sleep确实让程序暂停了,毕竟你得到的两个时间戳相差了10秒,但为啥是10s后一起显示出来呢?因为第一次输出的内容 还在buffer里,关闭输出缓存即可看到你想要的效果 ob_end_flush();

  2. 这样的循环,1秒内能输出几十万上百万次时间,同一秒内当然都一样,1s之后肯定会变。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文