pedrogaldino / php-thread-pool
实现PHP中线程池接口的利用
v1.0-beta.4
2020-04-01 05:38 UTC
Requires
- ext-json: *
- ext-parallel: *
- tightenco/collect: ^7.3
This package is auto-updated.
Last update: 2024-09-29 05:20:55 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);
记住,任务与父线程不共享内存。因此,始终加载应用程序需要的任何引导文件是很重要的。