【问题标题】:How to get out of the loop, if the PHP script takes more than 53 seconds to execute如果 PHP 脚本执行时间超过 53 秒,如何跳出循环
【发布时间】: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 个月才能完成我的任务。


但代码运行 90 秒后,我收到此错误:

我正在使用 CRON 作业来完成任务。并且看起来服务器给 CRON 作业提供了同样的错误。

所以,我想每 1 分钟运行一次 CRON 作业,这样我就不会出现超时错误。


但我很害怕:如果脚本在半行中添加数据并且 1 分钟结束,并且它不向其他半行添加数据怎么办。然后在新一分钟开始后,代码从下一个$number开始。

所以,如果我可以在 53 秒后 break; 退出循环(如果代码在 52 秒处开始另一个循环,然后在它结束时中断,那将是大约 58-59 秒)。

我的意思是,我会休息;循环结束之前的代码(} 之前)。所以我不退出循环,而数据被插入到一半的行中。

【问题讨论】:

  • 我认为你可以在休息功能的地方使用睡眠功能。
  • 休眠功能会延迟代码执行时间,对吧?它如何使我免于服务器 500 错误? @AvinashKumarSingh 兄弟?

标签: php mysql json cron


【解决方案1】:

我猜你的 PHP 的 max_execution_time 等于 90 秒,你可以通过 set_time_limit 指定 max_execution_time,但我认为这不是一个好方法。

试试pcntlpthreads,它会为你节省很多时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多