davispeixoto/PHP-Batch

View on GitHub
src/Davispeixoto/PhpBatch/Step/MultiProcessStep.php

Summary

Maintainability
B
4 hrs
Test Coverage
<?php namespace Davispeixoto\PhpBatch\Step;

    /**
     * Class Step
     * @package Davispeixoto\PhpBatch\Step
     */

/**
 * Created by Davis Peixoto <davis.peixoto@gmail.com>.
 * Date: 5/14/15
 * Time: 3:46 PM
 * Powered By PhpStorm
 */

use Davispeixoto\PhpBatch\Contracts\ItemProcessorInterface;
use Davispeixoto\PhpBatch\Contracts\ItemReaderInterface;
use Davispeixoto\PhpBatch\Contracts\ItemWriterInterface;
use Exception;
use Symfony\Component\Process\Process;

class MultiProcessStep extends AbstractStep
{
    /**
     * @var int
     */
    private $processAmount;

    /**
     * @var Process[]
     */
    private $processes;

    public function __construct(
        ItemReaderInterface $reader,
        ItemWriterInterface $writer,
        ItemProcessorInterface $processor
    ) {
        parent::__construct($reader, $writer, $processor);
        $this->processAmount = 1;
    }

    /**
     * @throws Exception
     */
    public function run()
    {
        try {
            for ($i = 0; $i < $this->processAmount; $i++) {
                $this->processes[] = new Process('foo');
            }

            $this->runProcesses();
        } catch (Exception $e) {
            throw $e;
        }
    }

    public function runProcesses()
    {
        foreach ($this->processes as $process) {
            try {
                $process->start();
            } catch (Exception $e) {
                continue;
            }
        }
    }

    /**
     * @param int $amount
     */
    public function setProcessesQuantity($amount)
    {
        $this->processAmount = $amount;
    }
}