steevanb / php-parallel-processes
Call processes in parallel
Installs: 3 326
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 12
pkg:composer/steevanb/php-parallel-processes
Requires
- php: ^8.2
- ext-pcntl: *
- steevanb/php-collection: ^6.0
- symfony/console: ^7.0
- symfony/process: 7.0.0 || >=7.1.5 <8.0.0
Requires (Dev)
- ext-simplexml: *
- phpunit/phpunit: ~9.5.0
- steevanb/php-backtrace: ~2.1.0
- symfony/var-dumper: ~6.3.0
README
php-parallel-processes
Execute processes in parallel.
Examples of use: start your environment, CI tools...
Installation
Use official Docker image
You can use the official Docker image to not install anything: steevanb/php-parallel-processes:x.y.z.
Example:
docker \
run \
--rm \
--tty \
--interactive \
--volume "$(pwd)":"$(pwd)" \
--workdir "$(pwd)" \
steevanb/php-parallel-processes:x.y.z \
php parallel-processes.php
If your processes use docker
If processes in parallel-processes.php use Docker, you have to add a volume on your Docker socket:
--volume /var/run/docker.sock:/var/run/docker.sock
All official php-parallel-processes images have Docker and Docker compose installed, so you only need to add a volume on the socket.
alpine, bookworm and buster
3 Docker images are provided for each php-parallel-processes version, use the one you want depending on your needs:
alpine: smaller version, but could be "too much simple" sometimesbuster: middle version, contains almost everything neededbookworm: larger version, should contain what you need
Install as Composer dependency
If you want to add php-parallel-processes directly in your project:
composer require steevanb/php-parallel-processes ^1.0
Create processes configuration
You need to create a configuration for your processes, written in PHP.
Example: bin/start.php
Basic example
<?php declare(strict_types=1); use Steevanb\ParallelProcess\{ Console\Application\ParallelProcessesApplication, Process\Process }; use Symfony\Component\Console\Input\ArgvInput; # If you use the official Docker image, you should use the Composer global autoload require $_ENV['COMPOSER_GLOBAL_AUTOLOAD_FILE_NAME']; # If you use the Composer dependency version, you should use your Composer autoload require __DIR__ . '/vendor/autoload.php'; (new ParallelProcessesApplication()) ->addProcess((new Process(['first', 'process']))->setName('First process')) ->addProcess((new Process(['second', 'process']))->setName('Second process')) ->run(new ArgvInput($argv));
Configurations
Global timeout
You can configure the global timeout with ParallelProcessesApplication::setTimeout().
Default value: null (no timeout).
(new ParallelProcessesApplication()) // Timeout is in seconds, here we will have a 10s timeout ->setTimeout(10)
Refresh interval
You can configure the refresh interval, to scan all processes status and start the next ones,
with ParallelProcessesApplication::setRefreshInterval().
Default value: 10000 (10ms)
(new ParallelProcessesApplication()) // Timeout is in microseconds, here we will have a 500ms timeout ->setRefreshInterval(50000)
Maximum processes in parallel
You can configure the maximum number of processes in parallel
with ParallelProcessesApplication::setMaximumParallelProcesses().
Default value: null (no maximum)
(new ParallelProcessesApplication()) // Here we will have maximum 3 processes in parallel ->setMaximumParallelProcesses(3)
Theme
php-parallel-processes comes with 2 themes:
- default
- Output everything
- Use verbosity (
-v,-vvor-vvv) to add execution time and process outputs - Should be used when you need to see live processes status, most of the time ;)
- summary
- Output only the start and the end of parallel processes
- Use verbosity (
-v,-vvor-vvv) to add execution time and process outputs - Should be used when you don't need to see live processes status, in CI for example
Configure it with ParallelProcessesApplication::setTheme():
use Steevanb\ParallelProcess\Console\Application\Theme\DefaultTheme(); (new ParallelProcessesApplication()) ->setTheme(new DefaultTheme())
You can also configure it in CLI with --theme (CLI override PHP configuration):
php parallel-processes.php --theme summary
You can create your own theme by implementing ThemeInterface.