PHPackages                             zv/mprocess - 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. zv/mprocess

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

zv/mprocess
===========

Multi process task execution based on swoole/基于 swoole 的多任务进程管理

v1.1.1(3y ago)595MITPHPPHP &gt;=7.0.0

Since Aug 8Pushed 3y ago1 watchersCompare

[ Source](https://github.com/djunny/mprocess)[ Packagist](https://packagist.org/packages/zv/mprocess)[ Docs](https://github.com/djunny/mprocess)[ RSS](/packages/zv-mprocess/feed)WikiDiscussions master Synced 6d ago

READMEChangelog (4)DependenciesVersions (7)Used By (0)

mprocess
========

[](#mprocess)

Multi process task execution based on swoole, support queue/lock/atomic

### Installation

[](#installation)

```
composer require zv/mprocess

```

### basic

[](#basic)

```
$process = new \ZV\MProcess(5);

$task_list = range(0, 10);

$process->do(function ($process_index, $process_count) use ($task_list) {

    foreach ($task_list as $task_index => $task) {

        if ($process_count > 1 && $task_index % $process_count != $process_index) {
            continue;
        }

        echo sprintf('[%d/%d][PID=%d][Start=%d]' . PHP_EOL, $process_index, $process_count, getmypid(), $task);

        sleep(rand(1, 3));

        echo sprintf('[%d/%d][PID=%d][Ended=%d]' . PHP_EOL, $process_index, $process_count, getmypid(), $task);
    }

})->wait();
```

### queue

[](#queue)

```
$process = new \ZV\MProcess(5);

$task_list = range(0, 10);
foreach ($task_list as $task) {
    $process->push($task);
}

$process->do(function ($process_index, $process_count) use ($process) {

    while ($task = $process->pop()) {

        echo sprintf('[%d/%d][PID=%d][Start=%d]' . PHP_EOL, $process_index, $process_count, getmypid(), $task);

        sleep(rand(1, 3));

        echo sprintf('[%d/%d][PID=%d][Ended=%d]' . PHP_EOL, $process_index, $process_count, getmypid(), $task);
    }

})->wait();
```

### loop task under multi process

[](#loop-task-under-multi-process)

```
$tasks   = range(1, 10);
$process = new \ZV\MProcess(count($tasks), 1024 * 10);

foreach ($tasks as $id) {
    $process->push($id);
}
// start count($tasks) process loop
$process->loop(function ($task_data) use ($process) {
    $id  = (int)$task_data;
    $log = sprintf('[PID=%s][GotTask=%d]' . PHP_EOL, getmypid(), $id);
    echo $log;
    // do task

    // push new task
    $process->lock(function () use ($process, $log) {
        if ($process->incr('tasks') < 5) {
            foreach (range(1, 10) as $_) {
                $new_id = rand(1000, 9999);
                $process->push($new_id);
                echo $process->atomic('tasks') . '[NewTask=' . $new_id . '/' . $_ . ']' . $log;
            }
        }
    });
})->wait();
```

### locker &amp;&amp; atomic

[](#locker--atomic)

```
$tasks   = range(1, 20);
$process = new \ZV\MProcess(count($tasks), 1024 * 10);

foreach ($tasks as $id) {
    $process->push($id);
}
// start count($tasks) process loop
$process->loop(function ($id) use ($process) {
    // push new task
    $process->lock(function () use ($process, $id) {
        if ($process->incr('tasks') < 5) {
            $log = sprintf('[PID=%s][GotTask=%d]' . PHP_EOL, getmypid(), $id);
            echo $log;
        }
    });
})->wait();
```

### event

[](#event)

```
$tasks   = range(1, 20);
$process = new \ZV\MProcess(count($tasks), 1024 * 10);
// start count($tasks) process loop
$process->on_init(function() use($tasks) {
    // init process by master process
    foreach ($tasks as $id) {
        $process->push($id);
    }
})->loop(function ($id) use ($process) {
    // push new task
    $process->lock(function () use ($process, $id) {
        if ($process->incr('tasks') < 5) {
            $log = sprintf('[PID=%s][GotTask=%d]' . PHP_EOL, getmypid(), $id);
            echo $log;
        }
    });
})->on_done(function(){
    // when all process work done
})->on_timeout(function(){
    // when process wait timeout
})->wait(600);// wait all process for 10 miniutes
```

### map &amp;&amp; queue

[](#map--queue)

```
$tasks   = range(1, 20);
$process = new \ZV\MProcess(count($tasks), 1024 * 10, 64);

// set key index
$process['test'] = 1;

// push to queue
foreach ($tasks as $id) {
    $process->push($id);
}

// loop queue
$process->loop(function ($id) use ($process) {
    echo $id,PHP_EOL;
})->wait();

// keep in memory
echo $process['test'] == 1, PHP_EOL;
```

more example see example/

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity14

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 50% 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 ~193 days

Recently: every ~241 days

Total

6

Last Release

1142d ago

Major Versions

v0.1.2 → v1.0.02022-09-05

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1797883?v=4)[djunny](/maintainers/djunny)[@djunny](https://github.com/djunny)

---

Top Contributors

[![cotrufoa](https://avatars.githubusercontent.com/u/121743171?v=4)](https://github.com/cotrufoa "cotrufoa (1 commits)")[![djunny](https://avatars.githubusercontent.com/u/1797883?v=4)](https://github.com/djunny "djunny (1 commits)")

---

Tags

phpperformancequeueswooleFlexiblelockeasymulti-processatomictask executionmulti task

### Embed Badge

![Health badge](/badges/zv-mprocess/health.svg)

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

###  Alternatives

[microsoft/azure-storage-queue

This project provides a set of PHP client libraries that make it easy to access Microsoft Azure Storage Queue APIs.

142.6M17](/packages/microsoft-azure-storage-queue)

PHPackages © 2026

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