PHPackages                             mix/worker-pool - 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. [Queues &amp; Workers](/categories/queues)
4. /
5. mix/worker-pool

ActiveLibrary[Queues &amp; Workers](/categories/queues)

mix/worker-pool
===============

Swoole-based worker pool, coroutine pool

v3.0.1(4y ago)49633Apache-2.0PHPPHP &gt;=7.0.0

Since Jul 10Pushed 4y ago1 watchersCompare

[ Source](https://github.com/mix-php/worker-pool)[ Packagist](https://packagist.org/packages/mix/worker-pool)[ Docs](https://openmix.org/mix-php)[ RSS](/packages/mix-worker-pool/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (1)Versions (7)Used By (3)

> OpenMix 出品：[https://openmix.org](https://openmix.org/mix-php)

Mix Worker Pool
===============

[](#mix-worker-pool)

Swoole-based worker pool, coroutine pool

基于 Swoole 的工作池，协程池

> go 版本：

Installation
------------

[](#installation)

```
composer require mix/worker-pool

```

单次调度
----

[](#单次调度)

- 如果不想阻塞执行，可以使用 `$pool->start()` 启动

```
$jobQueue = new Swoole\Coroutine\Channel(200);
$maxWorkers = 100;
$handler = function ($data) {
    // do something
};
$pool = new Mix\WorkerPool\WorkerPool($jobQueue, $maxWorkers, $handler);

go(function () use ($jobQueue, $pool) {
    // 投放任务
    for ($i = 0; $i < 1000; $i++) {
        $jobQueue->push($i);
    }
    // 停止
    $pool->stop();
});

$pool->run(); // 阻塞等待
```

上面是采用闭包处理任务，也可以使用对象处理任务

```
class FooHandler implements \Mix\WorkerPool\RunInterface
{
    public function do($data): void
    {
        // do something
    }
}
$pool = new Mix\WorkerPool\WorkerPool($jobQueue, $maxWorkers, new FooHandler());
```

常驻调度
----

[](#常驻调度)

> 适合处理 MQ 队列的异步消费

以 Redis 作为 MQ 为例：

```
$maxWorkers = 20;
$maxQueue = 10;
$jobQueue = new Swoole\Coroutine\Channel($maxQueue);
$handler = function ($data) {
    // do something
};
$pool = new Mix\WorkerPool\WorkerPool($jobQueue, $maxWorkers, $handler);

$quit = new Swoole\Coroutine\Channel();
foreach ([SIGHUP, SIGINT, SIGTERM] as $signal) {
    Swoole\Process::signal($signal, function () use ($quit) {
        $quit->push(true);
    });
}

go(function () use ($jobQueue, $pool, $quit) {
    // 投放任务
    while (true) {
        if (!$quit->isEmpty()) {
            $pool->stop();
            return;
        }
        try {
            $data = $redis->brPop(['test'], 1);
        } catch (\Throwable $ex) {
            // print log
            $pool->stop();
            return;
        }
        if (!$data) {
            continue;
        }
        $data = array_pop($data); // brPop命令最后一个键才是值
        $jobQueue->push($data);
    }
});

$pool->run(); // 阻塞等待
```

异常处理
----

[](#异常处理)

闭包或者对象 `do` 方法中执行的代码，可能会抛出异常，必须要使用 `try/catch` 避免协程退出

```
class FooHandler implements \Mix\WorkerPool\RunInterface
{
    public function do($data): void
    {
        try {
            // do something
        } catch (\Throwable $ex){
            // print log
        }
    }
}
```

License
-------

[](#license)

Apache License Version 2.0,

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity18

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity54

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 ~75 days

Recently: every ~85 days

Total

6

Last Release

1763d ago

Major Versions

v2.2.16 → v3.0.12021-07-21

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/16074765?v=4)[LIU JIAN](/maintainers/onanying)[@onanying](https://github.com/onanying)

---

Top Contributors

[![onanying](https://avatars.githubusercontent.com/u/16074765?v=4)](https://github.com/onanying "onanying (16 commits)")

---

Tags

coroutine-poolpoolworker-poolswoolemixworker-poolcoroutine-pool

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/mix-worker-pool/health.svg)

```
[![Health](https://phpackages.com/badges/mix-worker-pool/health.svg)](https://phpackages.com/packages/mix-worker-pool)
```

PHPackages © 2026

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