Время выполнения PHP: как измерить с помощью системы Symfony - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь отправить большее количество писем с использованием PHP в систему Symfony 3.4. Теперь скрипт останавливается из-за ограничения времени выполнения 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 секунды, но там выполнение сценария было остановлено.

Я уже провел много исследований, но я просто не могу понять, почему мой сценарий делает то, чего не должен. Любые идеи будут высоко оценены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...