PHPackages                             wuzehv/phpmw - 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. wuzehv/phpmw

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

wuzehv/phpmw
============

php多进程master worker模型

v1.1.3(2y ago)1209MITPHPPHP &gt;=7.0

Since Nov 6Pushed 2y ago1 watchersCompare

[ Source](https://github.com/wuzehv/phpmw)[ Packagist](https://packagist.org/packages/wuzehv/phpmw)[ Docs](https://github.com/wuzehv/phpmw)[ RSS](/packages/wuzehv-phpmw/feed)WikiDiscussions master Synced today

READMEChangelogDependenciesVersions (12)Used By (0)

php多进程
======

[](#php多进程)

- master worker模型
- 参考iphp框架实现

### 使用

[](#使用)

1. 安装

```
composer require wuzehv/phpmw
```

2. 使用

```
include_once "vendor/autoload.php";

// 继承抽象类
class Test extends \PhpMw\BaseMasterWorker
{
    // 添加任务
    function master()
    {
        for ($i = 0; $i < 200; $i++) {
            $this->addJob($i);
        }
    }

    // 处理任务
    function worker($job)
    {
        usleep(100);
        echo $job, PHP_EOL;
    }
}

$obj = new Test();

// 设置进程数，默认8个
$obj->setWorkerNum(5);

$obj->run();
```

### 实现原理

[](#实现原理)

进程间通信采用socket

1. 启动主进程，作为manager，监听随机端口
2. 启动master进程，连接manager
3. 启动多个worker进程，连接manager
4. 调用run方法后，内部调用业务方实现的master方法，添加任务给manager
5. manager将任务分发给空闲的worker进程，worker进程调用业务方实现的worker方法
6. 任务处理完成，所有进程退出

### 可能遇到的问题

[](#可能遇到的问题)

#### 僵尸进程

[](#僵尸进程)

1. master添加完任务后就会退出，在程序退出之前会作为僵尸进程存在
2. worker进程如果出现致命错误，会作为僵尸进程存在，也即不能处理任何请求

最终都会被主进程回收

#### 如何kill所有的进程

[](#如何kill所有的进程)

直接kill主进程pid即可，因为程序内部做了`SIGINT、SIGTERM`信号处理，信号处理器会系统调用`kill -KILL pid`强制杀死所有子进程

理论上不需要执行类似这种命令`ps -ef | grep ...... | awk '{print $2}' | xargs kill -9`

#### 进程树查看

[](#进程树查看)

```
htop
ps -fS | grep ......
pstree -p pid
```

#### Too many open files

[](#too-many-open-files)

这个错误是进程文件描述符个数限制，查看设置`ulimit -n`

#### 异常处理

[](#异常处理)

1. master方法内的异常会导致master进程退出，已添加的任务会继续执行，直至退出
2. worker进程内的异常会被捕获，但是不会产生任何错误输出，所以**需要业务方务必自行捕获异常**

#### job少，worker进程多

[](#job少worker进程多)

执行过程中，master进程会迅速执行完毕并发送退出信息，`socket_select`获取到master退出信息，在所有任务分发完成后，manager从select的死循环break，之后会调用`quitAll`方法，多于的worker进程会结束，执行中的worker会继续执行，直至完成退出

#### job多，worker进程少

[](#job多worker进程少)

job生成时，master会写入大量job到`socket`，worker会慢慢进行处理，此时master进程和worker进程会同时存在

在worker进程都在工作的时候，`socket_select`会暂时不监听master进程套接字，直至有worker进程空闲，从而实现进程的分发

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity13

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity55

Maturing project, gaining track record

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

Recently: every ~250 days

Total

11

Last Release

1007d ago

PHP version history (2 changes)v1.0.3PHP &gt;=5.4.0

v1.1.3PHP &gt;=7.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/24937349cbb9658673c0ec6c03cb814f444ab79f41d0a67bf835633c1fd8c534?d=identicon)[xxhui](/maintainers/xxhui)

---

Tags

workerpcntlmaster

### Embed Badge

![Health badge](/badges/wuzehv-phpmw/health.svg)

```
[![Health](https://phpackages.com/badges/wuzehv-phpmw/health.svg)](https://phpackages.com/packages/wuzehv-phpmw)
```

###  Alternatives

[swarrot/swarrot

A simple lib to consume RabbitMQ queues

3654.4M8](/packages/swarrot-swarrot)[dusterio/laravel-aws-worker

Run Laravel (or Lumen) tasks and queue listeners inside of AWS Elastic Beanstalk workers

3105.7M](/packages/dusterio-laravel-aws-worker)[clue/mq-react

Mini Queue, the lightweight in-memory message queue to concurrently do many (but not too many) things at once, built on top of ReactPHP

144691.7k4](/packages/clue-mq-react)[qxsch/worker-pool

Runs tasks in a parallel processing workerpool.

108325.7k1](/packages/qxsch-worker-pool)[iron-io/iron_worker

Client library for IronWorker (multi-language worker platform that runs tasks in the background, in parallel, and at scale.)

57208.5k1](/packages/iron-io-iron-worker)[yidas/codeigniter-queue-worker

CodeIgniter 3 Queue Worker Management Controller

9665.2k2](/packages/yidas-codeigniter-queue-worker)

PHPackages © 2026

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