|
1 | 1 | # Symfony Process Manager
|
2 | 2 |
|
3 |
| -[](https://packagist.org/packages/bluepsyduck/symfony-process-manager) [](https://packagist.org/packages/bluepsyduck/symfony-process-manager) [](https://travis-ci.com/BluePsyduck/symfony-process-manager) [](https://codecov.io/gh/BluePsyduck/symfony-process-manager) |
| 3 | +[](https://packagist.org/packages/bluepsyduck/symfony-process-manager) |
| 4 | +[](https://packagist.org/packages/bluepsyduck/symfony-process-manager) |
| 5 | +[](https://travis-ci.com/BluePsyduck/symfony-process-manager) |
| 6 | +[](https://codecov.io/gh/BluePsyduck/symfony-process-manager) |
4 | 7 |
|
5 |
| -TBD |
| 8 | +This package provides a simple process manager class to be able to execute multiple processes with a specified limit |
| 9 | +of parallel processes. The class expects the processes to use the [Symfony Process](https://github.com/symfony/process) |
| 10 | +component. |
| 11 | + |
| 12 | +## Usage |
| 13 | + |
| 14 | +The usage of the process manager is straight forward and best explained with an example. |
| 15 | + |
| 16 | +```php |
| 17 | +<?php |
| 18 | +use BluePsyduck\SymfonyProcessManager\ProcessManager; |
| 19 | +use Symfony\Component\Process\Process; |
| 20 | + |
| 21 | +$numberOfParallelProcesses = 4; // The number of processes to execute in parallel. |
| 22 | +$pollInterval = 100; // The interval to use for polling the processes, in milliseconds. |
| 23 | + |
| 24 | +$processManager = new ProcessManager($numberOfParallelProcesses, $pollInterval); |
| 25 | + |
| 26 | +// Add some processes |
| 27 | +// Processes get executed automatically once they are added to the manager. |
| 28 | +// If the limit of parallel processes is reached, they are placed in a queue and wait for a process to finish. |
| 29 | +$processManager->addProcess(new Process('ls -l')); |
| 30 | +$processManager->addProcess(new Process('ls -l')); |
| 31 | + |
| 32 | +// Wait for all processes to finish |
| 33 | +$processManager->waitForAllProcesses(); |
| 34 | + |
| 35 | + |
| 36 | +``` |
| 37 | + |
| 38 | +## Callbacks |
| 39 | + |
| 40 | +The process manager allows for some callbacks to be specified, which get called depending on the state of a process. |
| 41 | + |
| 42 | +* **processStartCallback:** Triggered before a process is started. |
| 43 | +* **processFinishCallback:** Triggered when a process has finished. |
| 44 | +* **processSuccessCallback:** Triggered when a processes has finished with an exit code of 0. |
| 45 | +* **processFailCallback:** Triggered when a processes has failed with an exit code other than 0. |
| 46 | + |
| 47 | +_Note:_ Each process will trigger either the `processSuccessCallback` or the `processFailCallback` depending of its exit |
| 48 | +code. The `processFinishCallback` will always be triggered afterwards, ignoring the exit code. |
| 49 | + |
| 50 | +Each callback gets the process instance which triggered the event passed as only parameter. Here is an example of |
| 51 | +setting a `processStartCallback`: |
| 52 | + |
| 53 | +```php |
| 54 | +<?php |
| 55 | +use BluePsyduck\SymfonyProcessManager\ProcessManager; |
| 56 | +use Symfony\Component\Process\Process; |
| 57 | + |
| 58 | +$processManager = new ProcessManager(); |
| 59 | + |
| 60 | +$processManager->setProcessStartCallback(function (Process $process): void { |
| 61 | + echo 'Starting process: ' . $process->getCommandLine(); |
| 62 | +}); |
| 63 | + |
| 64 | +$processManager->addProcess(new Process('ls -l')); |
| 65 | +$processManager->waitForAllProcesses(); |
| 66 | +``` |
0 commit comments