sinacms/multiprocess

用于PHP多进程异步任务管理的工具

1.1.4 2018-08-13 07:18 UTC

This package is not auto-updated.

Last update: 2024-09-29 05:21:09 UTC


README

This is high performance PHP Mutilprocessing Task Manager written in PHP, compatible with PHP-FPM and CLI.
这是一个用PHP编写的高性能PHP多进程异步任务管理器,与PHP FPM和CLI兼容。

内容

特性

  • 使用此工具,PHP脚本可以根据多进程异步调用,最终等待每个进程返回结果,节省大量时间。

  • 优雅且高效

  • 可以获取可调用函数的返回值

  • 您可以通过指定phpBin参数来指定异步执行脚本的PHP路径。

  • 异常处理

安装

您可以使用Composer从命令行安装此库。

composer require sinacms/multiprocess

使用

分发任务和异步执行

<?php

use Mutilprocessing\Async;

Async::create()->start('task.php', ['runTest'.$i]);

通过简单的函数分发任务并异步执行

!!! 警告:请勿在echo和return中插入'&&&'字符串,因为它会破坏程序运行

<?php

use Mutilprocessing\Async;

Async::create()->startFunc(function($param1, $param2) {
    echo $param1.$param2.PHP_EOL;
}, ['param1' => 'hello', 'param2' => ' world']);

$func = function ($param1, $param2) {
    echo "this is an another func";
};

Async::create()->startFunc($func, ['param1' => 'hello', 'param2' => ' PHP']); 

同步等待所有进程结束

<?php

use Mutilprocessing\Async;
$outData = [];
Async::wait(function($code, $out, $err) use(&$outData) {
//    var_dump($code, $out, $err);
//  you can handle code runtime exception like this
	 if (strlen($err) != 0) {
	 	//  do sth.
	 }
	 // and you can get return value like this
	 // more function detail see examples :)
	 array_push($outData, \Mutilprocessing\Async::getReturn($out));
});

outData结构

echos代表执行中的echo

returns代表执行中的返回值

array(4) {
  [0] =>
  array(2) {
    'echos' =>
    string(5) "hello"
    'returns' =>
    string(0) ""
  }
  [1] =>
  array(2) {
    'echos' =>
    string(6) "KZ RNG"
    'returns' =>
    string(10) "return 777"
  }
  [2] =>
  array(2) {
    'echos' =>
    string(17) "EDG AFSreturn 888"
    'returns' =>
    string(0) ""
  }
  [3] =>
  array(2) {
    'echos' =>
    string(6) "SKT RW"
    'returns' =>
    string(10) "return 666"
  }
}

getArgs从Async::start传递

// please pass $argv[1] to get args
<?php

use Mutilprocessing\Async;

Async::getArgs($argv[1], 'key');

清除所有任务

<?php

use Mutilprocessing\Async;

Async::discard();

文档

  • 异步

  • 选项缩写

  • public static function create()
  • public static function start($scriptname, $args, $phpBin="", $envs = [])
  • public function startFunc(callable $function, $args = [], $phpBin="")
  • public static function discard()
  • public static function wait(callable $logHandler = null)
  • public static function getArgs($argv = null)
  • public static function getReturn($out)
  • FunctionParser

  • 选项缩写

  • public static function genTmp(callable $function)

待办事项

  • 为每次执行(进程)注册回调
  • 添加多执行单元并一次性启动