From c6ba62bdd04c5ac63c2a94cf580c2ef0c5368f60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20=C5=A0tancl?= Date: Mon, 30 Sep 2024 16:36:37 +0200 Subject: [PATCH] ParallelCommand: add -P option for bypassing MAX_PROCESSES --- src/Concerns/ParallelCommand.php | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/Concerns/ParallelCommand.php b/src/Concerns/ParallelCommand.php index 0807fca3..aad7a1ec 100644 --- a/src/Concerns/ParallelCommand.php +++ b/src/Concerns/ParallelCommand.php @@ -14,7 +14,7 @@ use Symfony\Component\Console\Input\InputOption; trait ParallelCommand { - public const MAX_PROCESSES = 32; + public const MAX_PROCESSES = 24; protected bool $runningConcurrently = false; abstract protected function childHandle(mixed ...$args): bool; @@ -28,6 +28,14 @@ trait ParallelCommand 'How many processes to spawn. Maximum value: ' . static::MAX_PROCESSES . ', recommended value: core count (use just -p)', -1, ); + + $this->addOption( + 'forceProcesses', + 'P', + InputOption::VALUE_OPTIONAL, + 'Same as --processes but without a maximum value. Use at your own risk', + -1, + ); } protected function forkProcess(mixed ...$args): int @@ -91,7 +99,12 @@ trait ParallelCommand protected function getProcesses(): int { - $processes = $this->input->getOption('processes'); + $processes = $this->input->getOption('forceProcesses'); + $forceProcesses = $processes !== -1; + + if ($processes === -1) { + $processes = $this->input->getOption('processes'); + } if ($processes === null) { // This is used when the option is set but *without* a value (-p). @@ -109,8 +122,8 @@ trait ParallelCommand exit(1); } - if ($processes > static::MAX_PROCESSES) { - $this->components->error('Maximum value for processes is ' . static::MAX_PROCESSES); + if ($processes > static::MAX_PROCESSES && ! $forceProcesses) { + $this->components->error('Maximum value for processes is ' . static::MAX_PROCESSES . ' provided value: ' . $processes); exit(1); }