PHP执行时间:如何使用symfony系统进行衡量

时间:2018-05-07 14:31:05

标签: php symfony email symfony-3.4

我想在symfony 3.4系统中使用PHP发送更多的电子邮件。现在脚本由于php时间执行限制而停止,当然我需要解决这个问题。

我的想法是将所有电子邮件发送到表email_queue中,然后在将它们保存到队列中后发送。

所以我正在保存所有这些电子邮件,显示一个带有进度条的页面并进行ajax调用,该调用应该在时间限制内发送电子邮件,报告发送的数量(更新进度条)和如果队列中遗留了某些内容,则会再次调用该片段直到发送完所有内容。

到目前为止一切顺利。现在我尝试测量ajax脚本部分的执行时间,以便在达到30秒的时间限制之前停止发送。 现在由于某种原因,测量总是小于30秒,但在测量的执行时间甚至达到2秒之前,脚本由于达到时间限制而停止。为什么会这样? 这就是我测量的方法:

    $executionTimes = [];
    $executionPoints = [];
    $timeStart = $_SERVER['REQUEST_TIME_FLOAT'];
    foreach ($mailQueue as $mail) {

        // do some mail configuration

        // send the email

        $now = microtime(true);
        $executionTime = $now - $timeStart;
        $executionTimes[] = $executionTime;
        $executionPoints[] = $now;
        if ($executionTime >= 10) {
            break;
        }
    }
    // return data

使用$_SERVER['REQUEST_TIME_FLOAT']我以为我会得到真正的执行时间,包括所有的symfony开销。这不正确吗?

以下是一次运行的结果:

{
  "timeStart": 1525702394.248,
  "executionPoints": [
    1525702394.863065,
    1525702394.866609,
    1525702394.870812,
    1525702394.874702,
    1525702394.878718,
    1525702394.882434,
    1525702394.886418,
    1525702394.890428,
    1525702394.894365,
    1525702394.899119
  ],
  "executionTimes": [
    0.6150650978088379,
    0.6186091899871826,
    0.622812032699585,
    0.626702070236206,
    0.6307179927825928,
    0.6344339847564697,
    0.6384181976318359,
    0.6424281597137451,
    0.6463651657104492,
    0.6511189937591553
  ]
}

所以上次执行测量的时间不到0.7秒,但脚本执行停止了。

我已经做了很多研究,但我无法弄清楚为什么我的脚本不应该做的事情。任何想法都将受到高度赞赏。

0 个答案:

没有答案