softdd/processpool

基于swoole封装的进程池

dev-master 2024-06-03 06:07 UTC

This package is auto-updated.

Last update: 2024-09-03 06:35:56 UTC


README

基于swoole的封装。

Installation

composer require softdd/processpool

Usage

同时维护了任务池和进程池。

参数列表

  • $taskList 所有的任务列表
  • $processNum 进程数量
  • $processCallback 子进程的业务逻辑
  • $params 额外传递的参数
  • $debug是否开启dbug 输出调试信息

会启用固定个数的进程,给任务池分配任务给进程,在进程处理完任务后,整理结果,再次分配任务。直至所有任务处理完毕。

$taskList 所有的任务列表 为数组结构,每个子任务必须是字符串,请序列化或者encode。弹出任务用的array_pop

$processNum 固定的进程数量,当进程数量大于任务数量时,会取任务数量。

在 $processCallback 中实现每个进程的处理逻辑,

    //$task 任务数据
    //$params 额外的参数
    call_user_func_array($this->processCallback,[$task,$params];

不提供返回值,请在$processCallback中更改数据,或者调用接口来记录结果。

对全局变量的数据请使用$params,如 任务运行环境,语言等,或者其他通用的数据。 $params中的数据会提供给processCallback

demo

$taskList = [2, 5, 8, 4, 1, 1, 3];
$processNum = 20;
$params = ['param1' => 1, 'param2' => 2];
$process = new ProcessPool($taskList, $processNum, function ($task, $params) {
    var_dump($task);
    var_dump($params);
}, $params, 1);

todo

  • 超时检测
  • 异常处理