bluepsyduck/symfony-process-manager

Symfony进程管理器,能够并行运行多个进程。

1.3.3 2021-12-03 21:30 UTC

This package is auto-updated.

Last update: 2024-09-06 02:25:40 UTC


README

GitHub release (latest SemVer) GitHub build Codecov

此包提供了一个简单的进程管理器类,可以执行多个进程,并指定并行进程的限制。该类期望进程使用Symfony Process组件。

用法

进程管理器的使用方法简单明了,以下是一个示例。

<?php
use BluePsyduck\SymfonyProcessManager\ProcessManager;
use Symfony\Component\Process\Process;

$numberOfParallelProcesses = 4; // The number of processes to execute in parallel.
$pollInterval = 100; // The interval to use for polling the processes, in milliseconds.
$processStartDelay = 0; // The time to delay the start of processes to space them out, in milliseconds.

$processManager = new ProcessManager($numberOfParallelProcesses, $pollInterval, $processStartDelay);

// Add some processes
// Processes get executed automatically once they are added to the manager. 
// If the limit of parallel processes is reached, they are placed in a queue and wait for a process to finish.
$processManager->addProcess(Process::fromShellCommandline('ls -l'));
$processManager->addProcess(Process::fromShellCommandline('ls -l'));

// Wait for all processes to finish
$processManager->waitForAllProcesses();

回调函数

进程管理器允许指定一些回调函数,这些函数会根据进程的状态被调用。

  • processStartCallback: 在进程启动之前触发。
  • processFinishCallback: 当进程完成时触发。
  • processTimeoutCallback: 当进程超时时触发。注意,之后还会触发processFinishCallback
  • processCheckCallback: 每当检查进程是否完成时触发。注意,此回调函数会定期调用,但在processStartCallbackprocessFinishCallbackprocessTimeoutCallback之间至少调用一次。

每个回调函数都接收一个触发事件的进程实例作为唯一参数。以下是一个设置processStartCallback的示例。

<?php
use BluePsyduck\SymfonyProcessManager\ProcessManager;
use Symfony\Component\Process\Process;

$processManager = new ProcessManager();

$processManager->setProcessStartCallback(function (Process $process): void {
    echo 'Starting process: ' . $process->getCommandLine();
});

$processManager->addProcess(Process::fromShellCommandline('ls -l'));
$processManager->waitForAllProcesses();