rauny-henrique/php-thread-pool

实现了一个用于PHP的线程池接口

v1.0-beta.5 2021-06-04 17:53 UTC

This package is auto-updated.

Last update: 2024-09-05 01:08:02 UTC


README

此包是一个简单的PHP线程池管理器,可轻松使用简单且功能强大的界面创建并发任务。

它需要PHP 7.4线程安全以及PHP并行扩展。

安装

您可以使用PECL在您的PHP中安装所需的扩展。

pecl install paralell

包安装

composer require pedrogaldino/php-thread-pool

快速入门

任务

任务是在队列中执行代码的地方。基本上是您需要以并发方式运行而不阻塞父代码执行的代码。

让我们创建我们的任务

<?php

namespace App\Tasks;

use Galdino\Threads\Pool\Task;

class MyTask extends Task {

    public function onExecute()
    {
        print "Task is started" . PHP_EOL;  
        sleep(10);  
        print "Task is finished" . PHP_EOL;  
    }
    
}

现在,让我们创建我们的任务池并将任务调度到待处理队列中

<?php
  
use Galdino\Threads\Pool\Bootstrap;  
use Galdino\Threads\Pool\Pool;
use App\Tasks\MyTask;

$bootstrap = new Bootstrap();  
$pool = new Pool($bootstrap);

$myTask = new MyTask('Task name');

$pool->addTask($myTask);

就这样。该池将自动创建一个队列来处理此任务。

引导

引导包含当任务执行时应用程序需要运行的文件。您可以将所有需要的文件传递给构造函数。

$bootstrap = new Bootstrap([
    'boostrap/my_application_bootstrap.php'
]);

引导类将尝试自动要求composer自动加载文件(如果存在)。如果您想禁用此功能,请将false设置为第二个参数。

$bootstrap = new Bootstrap([
    'boostrap/my_application_bootstrap.php'
], false);

另一种初始化引导的方法

$bootstrap = Bootstrap::addFiles([  
    'bootstrap_file.php'  
]);

池将自动管理队列和任务执行。

您可以向池中指定要自动创建多少个队列。

// auto create 5 queues according to the tasks demand
$pool = new Pool($bootstrap, 5);  

队列

每个队列一次处理一个任务。

您可以向池中手动添加新队列。

$pool->addQueue('My queue name');

如果您不需要池,也可以单独创建一个队列。

use Galdino\Threads\Pool\Bootstrap;
use Galdino\Threads\Pool\Queue;

$bootstrap = new Bootstrap();
$queue = new Queue('My queue name', $bootstrap);

$queue->addTask($myTask);

记住,任务不与父线程共享内存。因此,始终加载您的应用程序需要的任何引导文件很重要。