underpin/background-process-loader

Underpin 的异步、后台进程加载器。

1.1.0 2021-11-23 14:21 UTC

This package is auto-updated.

Last update: 2024-09-23 22:18:29 UTC


README

Background Processing 集成于 Underpin WordPress 框架。

由 Delicious Brains 原始描述

WP Background Processing 可用于触发非阻塞异步请求或作为后台处理工具,允许您排队任务。查看示例插件或阅读相关文章。

在 Underpin 中使用此工具的优点

  1. 所有操作都在 Underpin 的注册表中完成,这与后台处理的工作方式非常兼容。
  2. Underpin 扩展后台处理以使用 Underpin 的事件日志。

安装

使用 Composer

composer require underpin/background-process-loader

手动

此插件使用内置的自动加载器,只要 Background Processing 在此扩展之前是必需的,它应该按预期工作。

require_once(__DIR__ . '/underpin-background-processes/underpin-background-process.php');

设置

  1. 安装此加载器。
  2. 安装 Underpin。请参阅 Underpin 文档
  3. 创建 Background_ProcessAsync_Request 类。
  4. 使用 Underpin 注册进程。

处理异步任务

来自 Delicious Brains

异步请求对于将慢速的一次性任务(如发送电子邮件)推送到后台进程非常有用。一旦请求被发送,它将立即在后台处理。

underpin()->async_requests()->add( 'key', [
	'action'               => 'key',        // Action Name. Must be unique.
	'task_action_callback' => function () { // Callback to fire
		// do things
	},
] );

您还可以扩展 Async_Request 并直接引用扩展类,如下所示

underpin()->async_request()->add('key','Namespace\To\Class');

一旦注册,您可以在任何时候运行操作,如下所示

underpin()->async_requests()->dispatch( 'key' );

处理后台进程

来自 Delicious Brains

后台进程的工作方式与异步请求类似,但允许您排队任务。一旦队列被发送,将处理队列中的项目。队列也将根据可用的服务器资源进行扩展,因此高端服务器将每批处理更多项目。一旦一批完成,下一批将立即开始。

默认情况下,每 5 分钟运行一次健康检查,以确保在队列中存在待处理项目时队列正在运行。如果队列失败,它将重新启动。

队列按照先到先服务的原则工作,这允许即使在队列正在处理时也可以向队列中推入更多项目。

您可以直接注册后台进程,就像注册任何其他加载器一样,如下所示

underpin()->background_processes()->add( 'example', [
	'action'               => 'example_action_name', // Action Name. Must be unique.
	'task_action_callback' => function ( $item ) {   // Callback to fire on a single item.
	  // Do an action
	},
] );

task_action_callback 应包含对队列项执行任何逻辑的逻辑。返回 false 以从队列中删除项或返回 $item 以将其推回队列以供进一步处理。如果项已修改并被推回队列,则在退出批处理之前将保存当前状态。

或者,您可以扩展 Background_Process 并直接引用扩展类,如下所示

underpin()->background_processes()->add('key','Namespace\To\Class');

一旦注册,您可以将所需数量的项目添加到队列中

underpin()->background_processes()->enqueue( 'key', ['args' => 'to pass to task_action_callback'] );

最后,当您完成排队项目后,您可以发送处理器以在每个排队的项目上运行进程

underpin()->background_processes()->dispatch( 'key' );