/**
  *
  */
 public function run()
 {
     echo "ImagickTaskRunner started\n";
     /** @noinspection PhpUndefinedMethodInspection */
     \ImagickDemo\Imagick\functions::load();
     \ImagickDemo\ImagickDraw\functions::load();
     \ImagickDemo\ImagickPixel\functions::load();
     \ImagickDemo\ImagickKernel\functions::load();
     \ImagickDemo\ImagickPixelIterator\functions::load();
     \ImagickDemo\Tutorial\functions::load();
     $maxRunTime = 60;
     // one minute
     $maxRunTime *= 60;
     // 1hour
     // Each image generated hurries up the restart by 50 seconds
     // for a max of 72 images generated per run
     $taskPseudoTime = 50;
     $endTime = time() + $maxRunTime;
     $count = 0;
     while (time() < $endTime) {
         $task = $this->taskQueue->waitToAssignTask();
         if (!$task) {
             echo ".";
             $count = $count + 1;
             if ($count % 20 == 0) {
                 echo "\n";
             }
             //Sleep for 1/10th of a second
             usleep(100000);
             continue;
         }
         echo "A task! " . "\n";
         $endTime -= $taskPseudoTime;
         try {
             $startTime = microtime(true);
             $this->execute($task);
             $time = microtime(true) - $startTime;
             $this->asyncStats->recordTime(self::EVENT_IMAGE_GENERATED, $time);
             echo "Task complete\n";
             $this->taskQueue->completeTask($task);
         } catch (\ImagickException $ie) {
             echo "ImagickException running the task: " . $ie->getMessage();
             $this->taskQueue->errorTask($task, get_class($ie) . ": " . $ie->getMessage());
         } catch (\Auryn\BadArgumentException $bae) {
             //Log failed job
             echo "BadArgumentException running the task: " . $bae->getMessage();
             $this->taskQueue->errorTask($task, get_class($bae) . ": " . $bae->getMessage());
         } catch (\Exception $e) {
             echo "Exception running the task: " . $e->getMessage();
             $this->taskQueue->errorTask($task, get_class($e) . ": " . $e->getMessage());
         }
     }
     echo "\nImagickTaskRunner exiting\n";
 }
 /**
  *
  */
 public function actuallyRun()
 {
     echo "ImagickTaskRunner::actuallyRun\n";
     try {
         echo "Waiting for task " . "\n";
         $task = $this->taskQueue->waitToAssignTask();
     } catch (QueueException $qe) {
         echo "QueueException running the task: " . $qe->getMessage() . "\n";
         return;
     }
     if (!$task) {
         self::tickTock();
         usleep(100000);
         //Sleep for 1/10th of a second
         return;
     }
     echo "A task!\n";
     try {
         $startTime = microtime(true);
         $this->execute($task);
         $time = microtime(true) - $startTime;
         $this->asyncStats->recordTime(self::EVENT_IMAGE_GENERATED, $time);
         echo "Task complete\n";
         $this->taskQueue->completeTask($task);
     } catch (\ImagickException $ie) {
         echo "ImagickException running the task: " . $ie->getMessage();
         $this->taskQueue->errorTask($task, get_class($ie) . ": " . $ie->getMessage());
         //   var_dump($ie->getTrace());
     } catch (\Auryn\BadArgumentException $bae) {
         //Log failed job
         echo "BadArgumentException running the task: " . $bae->getMessage();
         $this->taskQueue->errorTask($task, get_class($bae) . ": " . $bae->getMessage());
     } catch (\Exception $e) {
         echo "Exception running the task: " . $e->getMessage();
         $this->taskQueue->errorTask($task, get_class($e) . ": " . $e->getMessage());
         //var_dump($e->getTrace());
     }
 }
 /**
  *
  */
 public function run()
 {
     echo "ImagickTaskRunner started\n";
     \Imagick::setResourceLimit(\Imagick::RESOURCETYPE_TIME, 60);
     /** @noinspection PhpUndefinedMethodInspection */
     \ImagickDemo\Imagick\functions::load();
     \ImagickDemo\ImagickDraw\functions::load();
     \ImagickDemo\ImagickPixel\functions::load();
     \ImagickDemo\ImagickKernel\functions::load();
     \ImagickDemo\ImagickPixelIterator\functions::load();
     \ImagickDemo\Tutorial\functions::load();
     $resetTimeResourceLimit = false;
     if (false) {
         // ImageMagick has a 'non-optimal' way of measuring time passed
         // https://github.com/ImageMagick/ImageMagick/issues/113
         // Currently it does not appear possible to have both protection
         $maxRunTime = 60;
         // one minute
         $maxRunTime *= 60;
         // 1hour
         // Each image generated hurries up the restart by 50 seconds
         // for a max of 72 images generated per run
         $taskPseudoTime = 50;
         $resetTimeResourceLimit = true;
         // End rant
     } else {
         //Start remove this when time limit can be controlled better
         $maxRunTime = \Imagick::getResourceLimit(\Imagick::RESOURCETYPE_TIME);
         // one minute
         if ($maxRunTime <= 10) {
             $maxRunTime = 45;
         }
         // Each image generated hurries up the restart by 2 seconds
         // for a max of 30 images generated per run
         $taskPseudoTime = 2;
         //End remove this when time limit can be controlled better
     }
     $endTime = time() + $maxRunTime;
     $count = 0;
     while (time() < $endTime) {
         if ($resetTimeResourceLimit === true) {
             \Imagick::setResourceLimit(\Imagick::RESOURCETYPE_TIME, 45);
         }
         $task = $this->taskQueue->waitToAssignTask();
         if (!$task) {
             echo ".";
             $count = $count + 1;
             if ($count % 20 == 0) {
                 echo "\n";
             }
             //Sleep for 1/10th of a second
             usleep(100000);
             continue;
         }
         echo "A task! " . "\n";
         $endTime -= $taskPseudoTime;
         try {
             $startTime = microtime(true);
             $this->execute($task);
             $time = microtime(true) - $startTime;
             $this->asyncStats->recordTime(self::EVENT_IMAGE_GENERATED, $time);
             echo "Task complete\n";
             $this->taskQueue->completeTask($task);
         } catch (\ImagickException $ie) {
             echo "ImagickException running the task: " . $ie->getMessage();
             $this->taskQueue->errorTask($task, get_class($ie) . ": " . $ie->getMessage());
         } catch (\Auryn\BadArgumentException $bae) {
             //Log failed job
             echo "BadArgumentException running the task: " . $bae->getMessage();
             $this->taskQueue->errorTask($task, get_class($bae) . ": " . $bae->getMessage());
         } catch (\Exception $e) {
             echo "Exception running the task: " . $e->getMessage();
             $this->taskQueue->errorTask($task, get_class($e) . ": " . $e->getMessage());
         }
     }
     echo "\nImagickTaskRunner exiting\n";
 }