rauny-henrique / php-thread-pool
实现了一个用于PHP的线程池接口
v1.0-beta.5
2021-06-04 17:53 UTC
Requires
- ext-json: *
- ext-parallel: *
- tightenco/collect: ^7.3
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);
记住,任务不与父线程共享内存。因此,始终加载您的应用程序需要的任何引导文件很重要。