【发布时间】:2017-07-07 19:27:02
【问题描述】:
简而言之:如何在代码执行超过 53 秒后中断代码,如下所示:
while (5 < 200)
{
// do some work here, which will take around 1-6 seconds
if (code this loop is running for more than 53 seconds)
break;
}
如果你想知道,我为什么要这样做:
好的,这就是我正在做的事情:我正在从网络上的 7 个 JSON 页面复制数据并将它们插入到我的 MySQL 数据库中。
代码是这样的:
$start_time = microtime(TRUE); // Helps to count PHP script execution time
connect to database
$number = get inserted number into database
while ($number > ($number+20) )
{
7 Open JSON File link like this - "example.com/$number?api=xxxyyzz"
Use Prepared PDO statements to insert data into MySQL
}
// Code to count PHP script execution time
$end_time = microtime(TRUE);
$time_taken = $end_time - $start_time;
$time_taken = round($time_taken,5);
echo '<p>Page generated in '.$time_taken.' seconds.</p>';
因此,就我而言,完成添加所有数据的整个循环大约需要 5.2 秒。但是有些 JSON 文件是空的,所以如果它们是空的,那么完成 1 个循环只需要 1.4 秒。
因此,我想完成数百万个循环(从数百万个 JSON 文件中添加数据)。因此,如果我的代码 24/7 运行,我需要 1 个月才能完成我的任务。
我正在使用 CRON 作业来完成任务。并且看起来服务器给 CRON 作业提供了同样的错误。
所以,我想每 1 分钟运行一次 CRON 作业,这样我就不会出现超时错误。
但我很害怕:如果脚本在半行中添加数据并且 1 分钟结束,并且它不向其他半行添加数据怎么办。然后在新一分钟开始后,代码从下一个$number开始。
所以,如果我可以在 53 秒后 break; 退出循环(如果代码在 52 秒处开始另一个循环,然后在它结束时中断,那将是大约 58-59 秒)。
我的意思是,我会休息;循环结束之前的代码(} 之前)。所以我不退出循环,而数据被插入到一半的行中。
【问题讨论】:
-
我认为你可以在休息功能的地方使用睡眠功能。
-
休眠功能会延迟代码执行时间,对吧?它如何使我免于服务器 500 错误? @AvinashKumarSingh 兄弟?