Symfony: текущее время исполнения? - PullRequest
1 голос
/ 07 июня 2011

У меня есть скрипт, отнимающий много времени, и я хочу периодически регистрировать его время выполнения.Как узнать текущее время выполнения?

Ответы [ 4 ]

2 голосов
/ 29 августа 2011

Symfonian позволяет регистрировать время выполнения, используя менеджер таймера, который поставляется вместе с Symfony.

//Get timer instance called 'myTimer'.
$timer = sfTimerManager::getTimer('myTimer');
//Start timer.
$timer->startTimer();
// Do things
...
// Stop the timer and add the elapsed time
$timer->addTime();

Этот таймер будет сохранен в любом логгере, который вы настроили с помощью Symfony. По умолчанию у symfony есть sfWebDebugLogger для среды DEV, но вы можете создать свой собственный и настроить его в файле factories.yml.

Приятной особенностью этого регистратора является то, что он также регистрирует количество обращений к таймеру.

0 голосов
/ 07 июня 2011

Подумайте о том, что вы спрашиваете, каждое действие регистрируется в журнале Symfony (root / log / app_name_ [env] .log). Это ведение журнала выполняется после завершения операции (нет простого способа выяснить время выполнения потока, выполняющего php из php). Вы можете попробовать испортить код и добавить код для регистрации в определенных точках кода, текущего времени выполнения, что-то вроде:

$init = microtime();
log("Process started at:". $init);
foreach($this->getLotsOfRecords() as $index=>$record)
{
  $start = microtime();
  log ($index." record started at".microtime());
  [do stuff]
  $end = microtime();
  log ($index." record ended at". $end . " time elapsed: ". ($start - $end));
}
$last = microtime();
log("Total elapsed time is: ". ($init - $last));

Это псевдокод, но я верю, что вы можете понять остальное, надеюсь, это поможет!

0 голосов
/ 08 июня 2011

Я закончил тем, что написал свой собственный статический класс:

class Timer
{
  protected static $start = null;

  public static function getDuration($format = '%H:%I:%S')
  {
    $now = new DateTime();

    if (!self::$start)
    {
      self::$start = new DateTime();
    }
    $period = $now->diff(self::$start);

    return $period->format($format);
  }
}

И записал его частично (зациклено):

<?php $logger->log(sprintf("Duration: %s", $duration = Timer::getDuration())) ?>
0 голосов
/ 07 июня 2011

Почему бы не использовать date('Y-m-d H:i:s') и записать это ... и / или вычислить разницу от времени начала, полученного с помощью date ()?

...