fizzday / multiprocess

php 多进程库依赖于 pcntl php 扩展 (php多进程类,基于php的pcntl扩展)

dev-master 2017-01-26 02:31 UTC

This package is not auto-updated.

Last update: 2024-09-23 07:16:13 UTC


README

php 多进程库依赖于 pcntl php 扩展(php多进程类,基于php的pcntl扩展)

使用方法

安装

使用 composer

{
    {
        "fizzday/multiprocess": "dev-master"
    }
}

或者

composer require fizzday/multiprocess

使用(英文)

  1. 扩展 MultiProcess 抽象类
  2. 重写 myAct() 方法,执行具体操作
  3. 最后执行 run() 方法使其工作

代码类似于文件 myMulti.php

<?php
use Fizzday/MultiProcess/MultiProcess;

class MyMulti extends MultiProcess
{
    /**
     * @param $j the process num(第几个进程)
     * @param $i the circle num (第几次循环)
     */
    public function myAct($j, $i)
    {
        echo "this is the {$i} circle(循环) {$j} process(进程) \r\n";
        // example: 
        // suppose we have 100 rows data in total, we fetch 20 rows in on circle for 5 process
        // yet , we need circles: 100 / 20 = 5
        // we shell handle (20/5) rows in per process
        // suppose the datas in a array {$data), current process will handle the data index in the area:
        // from  {$i*20 + ($j)*(20/5)} to {$i*20 + ($j+1)*(20/5)}        
    }
}

$multi = new MyMulti(100, 20, 5);
$multi->run();

建议:我们最好使用命令行执行此文件,例如 php myMulti.php

使用(中文)

  1. 继承 MultiProcess 抽象类
  2. 重写 myAct() 方法,执行具体操作
  3. 最后执行 run() 方法

创建代码文件 myMulti.php

<?php
use Fizzday/MultiProcess/MultiProcess;

class MyMulti extends MultiProcess
{
    /**
     * @param $j 第几个进程
     * @param $i 第几次循环
     */
    public function myAct($j, $i)
    {
        echo "这是第 {$i} 次循环, 第 {$j} 个进程 \r\n";
        // 举例: 
        // 假设我们总共有100条数据, 每一次获取20条, 分5个进程来处理
        // 那么, 就需要(100/200)次循环来处理
        // 每个进程处理的数据条数为(20/5)
        // 假设我们取的数据在一个数组里, 那么当前进程所要操作的数据对应的编号区间为{$i*20 + ($j)*(20/5)}到{$i*20 + ($j+1)*(20/5)}  
    }
}

$multi = new MyMulti(100, 20, 5);
$multi->run();

建议:最好使用命令行执行 (php myMulti.php)