示例#1
0
 /**
  * @covers Gloubster\Worker\Worker::setFunction
  */
 public function testSetFunction()
 {
     $registered_function = 'goldmember';
     $that = $this;
     $this->gearmanWorker->expects($this->once())->method('addFunction')->will($this->returnCallback(function ($function, $callable) use($that, $registered_function) {
         $that->assertEquals($registered_function, $function);
         $that->assertTrue(is_callable($callable));
     }));
     $function = $this->getMock('\\Gloubster\\Worker\\Functions\\FunctionInterface', array('execute', 'getFunctionName', 'setWorkerName'));
     $function->expects($this->any())->method('getFunctionName')->will($this->returnValue($registered_function));
     $this->object->setFunction($function);
 }
示例#2
0
 public function execute(InputInterface $input, OutputInterface $output)
 {
     $configuration = new Configuration(file_get_contents(__DIR__ . '/../../../config/config.json'));
     $resolver = new SpawnResolver($configuration, CpuInfo::detect());
     $factory = new Factory();
     $classname = $resolver->getClassName();
     if ($input->getOption('verbose')) {
         $outputLogger = new StreamHandler('php://stdout');
     } else {
         $outputLogger = new NullHandler();
     }
     $workers = new \ArrayIterator();
     for ($i = 1; $i <= $resolver->getSpawnQuantity(); $i++) {
         $output->write("Launching Worker <info>{$i}</info> ...");
         $logger = new Logger('Worker-' . $i);
         $logger->pushHandler($outputLogger);
         $logger->pushHandler(new RotatingFileHandler(__DIR__ . '/../../../logs/worker-' . $i . '.logs', 3));
         $worker = new Worker('Worker-' . $i, new \GearmanWorker(), $logger);
         foreach ($configuration['gearman-servers'] as $server) {
             $worker->addServer($server['host'], $server['port']);
         }
         $worker->setFunction(new $classname($configuration, $logger, $factory));
         $workers->append($worker);
         $output->writeln("Success !");
     }
     $manager = new ProcessManager(new EventDispatcher());
     $manager->process($workers, function (Worker $worker) {
         $worker->run();
     });
 }