sqonk/phext-detach

Detach 是一个库,可以在 PHP 脚本中使用分叉进程并行运行任务。

1.2.1 2022-12-18 23:09 UTC

This package is auto-updated.

Last update: 2024-09-30 02:07:58 UTC


README

Minimum PHP Version License

Detach 是一个库,可以在 PHP 脚本中使用分叉进程并行运行任务。它会克隆一个基于父进程的独立进程并执行请求的回调。

它体积小,仅依赖于 PCNTL 和 APCu PHP 扩展以及一些基本的 composer 包。

Detach 还具有极简主义的特点,只包含一组简单的函数和类,无需学习事件系统或架构,可以轻松集成到现有代码结构中。

查看 示例 以获取快速入门指南。

虽然生成的任务可以将数据返回给父任务,但也可以使用通道(Go 语言的通道的松散实现),提供一种简单的方法,允许独立进程之间发送和接收数据。

通道还可以用作逻辑门,通过强制任务等待所需的数据来控制各种任务的执行。

安装

通过 Composer

$ composer require sqonk/phext-detach

更新到 V1.0 之前

版本 1.1 更改了 通道和缓冲通道关闭时返回的值。以前它们返回 NULL,现在返回常量 CHAN_CLOSED。这样做是为了清楚地区分有意插入通道的空值和通道关闭。

类似于以下先前编写的代码

while ($value = $chan->get()) { 
	 // process value.
}

现在应编写如下

while (($value = $chan->get()) !== CHAN_CLOSED) { 
	 // process value.
}

或者,为了保持更简单的语法,您现在可以使用生成器

// function call..
foreach ($chan->incoming() as $value) {
  // process value.
}

// or directly passing the object as the iterator..
foreach ($chan as $value) {
  // process value.
}

从 V0.4 更新

版本 0.5+ 调整了 Dispatcher::map() 的工作方式,使其自动构建并启动 TaskMap,返回映射对象的 ->start() 的结果。其参数也已扩展,可以直接接受各种 TaskMap 配置选项,为 PHP8 的命名参数做准备。

从 V0.3 更新

版本 0.4+ 是从先前版本的重大更新。它将破坏为使用 V0.3 构建的现有代码。

最值得注意的是,之前名为 Channel 的类已被重命名为 BufferedChannel,并出现了一个新的 Channel 类。您可以在下面了解更多关于这两个类的信息。

此外,在开发后期,用于在任务之间传输数据的基于文件的存储切换到 APCu,现在除了 PCNTL 之外还需要扩展。

文档

API 参考 现已可用。

示例

浏览 示例代码 以获取基本概念快速入门指南。

致谢

Theo Howell

请参阅 Tudor Barbu 在 motanelu/php-thread 上的原始概念 pnctl 线程

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件