PHPackages                             kriss/multi-process - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. kriss/multi-process

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

kriss/multi-process
===================

Multi Async Process Manager based on symfony/process

v1.2.1(1y ago)02.5k—0%[1 issues](https://github.com/krissss/php-multi-process/issues)MITPHPPHP &gt;=7.4

Since Feb 14Pushed 1y ago1 watchersCompare

[ Source](https://github.com/krissss/php-multi-process)[ Packagist](https://packagist.org/packages/kriss/multi-process)[ RSS](/packages/kriss-multi-process/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (6)Dependencies (7)Versions (8)Used By (0)

php Multi Process
=================

[](#php-multi-process)

基于 [symfony/process](https://github.com/symfony/process) 实现的多进程管理

安装
--

[](#安装)

```
composer require kriss/multi-process
```

特性
--

[](#特性)

- 异步
- 并行
- 支持控制最大进程数
- 支持 logger
- 支持控制进程检查频率
- 获取进程最终输出
- 同步获取进程输出
- 支持 cli 和 fpm
- 支持调用系统命令和 php 代码（支持调用第三方框架自带的命令行入口，如 artisan）

基本使用
----

[](#基本使用)

```
use Kriss\MultiProcess\MultiProcess;
use Kriss\MultiProcess\PendingProcess;
use Symfony\Component\Process\Process;

// 调用系统命令
$results = MultiProcess::create()
    ->add('hostname')
    ->add(new Process(['ls']))
    ->add(Process::fromShellCommandline('echo 123'))
    ->add(
        PendingProcess::fromShellCommandline('pwd')
            ->setStartCallback(function ($type, $buffer) {
                echo $buffer;
            })
    );

var_dump($results->getOutputs());

// 调用 PHP 代码
$value = 123;
$results = MultiProcess::create()
    // callback
    ->add(function () use ($value) {
        // 支持 use 和 $this 使用
        return $value;
    })
    // 调用 SomeClass::method
    //->add([SomeClass::class, 'method'])
    ->wait();

var_dump($results->getOutputs());
```

如何调用框架自带的命令行
------------

[](#如何调用框架自带的命令行)

**注意**：此方法仅支持 `symfony/console` 类型的命令行

> 已自动支持 laravel 和 webman，无需进行以下配置

一般框架都是有配置的，如果使用当前扩展自带的 `bin/console` 无法加载配置相关代码，因此无法做到很多框架中所谓的 `Kernel::start`，就没法使用相关的组件， 解决此问题只需要进行如下配置即可

1. 在框架 `startup` 或 `bootstrap`（如 Laravel 的 AppServiceProvider 的 boot 方法中），添加 `PendingTaskProcess::$globalConsoleFile = __DIR__ . '/path/to/console';`
2. 注入 `TaskCallCommand` 命令（如 Laravel 的 AppServiceProvider 的 register 方法中添加 `$this->commands(TaskCallCommand::class)`）

与单进程 PHP 处理上的区别
---------------

[](#与单进程-php-处理上的区别)

可以使用以下方式对比测试使用该扩展和php原生循环的时间区别

```
use Kriss\MultiProcess\MultiProcess;

$filename = 'https://www.example.com/';

$startTime = microtime(true);
for ($i = 0; $i < 3; $i++) {
    file_get_contents($filename);
}
echo ('use time: ' . round(microtime(true) - $startTime, 6)) . PHP_EOL; // 3秒以上

for ($i = 0; $i < 3; $i++) {
    $processes[] = PendingProcess::fromShellCommandline("php -r \"echo file_get_contents('$filename');\"");
}
$startTime = microtime(true);
MultiProcess::create()
    ->addMulti($processes)
    ->wait();
echo ('use time: ' . round(microtime(true) - $startTime, 6)) . PHP_EOL; // 1秒多
```

参考
--

[](#参考)

其他示例详见 [tests](./tests)

[illuminate/process](https://github.com/illuminate/process)

[spatie/async](https://github.com/spatie/async)

###  Health Score

33

—

LowBetter than 75% of packages

Maintenance42

Moderate activity, may be stable

Popularity20

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~144 days

Recently: every ~180 days

Total

6

Last Release

468d ago

PHP version history (2 changes)v1.0.0PHP &gt;=7.2

v1.1.0PHP &gt;=7.4

### Community

Maintainers

![](https://www.gravatar.com/avatar/b4053cfc9956b8c15b9bc4c9c7c2bad625d16d1b6d9191019b2a25cc0972d955?d=identicon)[kriss](/maintainers/kriss)

---

Top Contributors

[![krissss](https://avatars.githubusercontent.com/u/10680903?v=4)](https://github.com/krissss "krissss (28 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/kriss-multi-process/health.svg)

```
[![Health](https://phpackages.com/badges/kriss-multi-process/health.svg)](https://phpackages.com/packages/kriss-multi-process)
```

###  Alternatives

[laravel/framework

The Laravel Framework.

34.7k509.9M17.0k](/packages/laravel-framework)[symfony/maker-bundle

Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.

3.4k111.1M568](/packages/symfony-maker-bundle)[symplify/monorepo-builder

Not only Composer tools to build a Monorepo.

5205.3M82](/packages/symplify-monorepo-builder)[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

728272.9k20](/packages/civicrm-civicrm-core)[shlinkio/shlink

A self-hosted and PHP-based URL shortener application with CLI and REST interfaces

4.8k4.3k](/packages/shlinkio-shlink)[shivas/versioning-bundle

Symfony application versioning, simple console command to manage version (with providers e.g. git tag) of your application using Semantic Versioning 2.0.0 recommendations

1121.2M1](/packages/shivas-versioning-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
